小编Dav*_*d M的帖子

Android SeekBarChangeListener和TouchListener无事件

我遇到按钮点击事件和搜索栏事件未触发的问题.当我在我的搜索栏上拖动时,滑块会直观地改变位置,但是我的搜索没有被触发的事件OnSeekBarChangedListener.我也有一个ImageButton应该接收点击事件,但它也不会触发.底部的MyView可以正确处理触摸事件.它有一个GLSurfaceView我可以平移和捏缩放.什么可能导致事件不发生?

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/tec_root">

    <ImageButton
        android:id="@+id/button_star"
        android:contentDescription="@string/star_description"
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_marginTop="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginEnd="16dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:src="@drawable/star_empty"
        android:background="#00000000"
        android:scaleType="fitXY"/>

    <LinearLayout
        android:id="@+id/view_plot"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_below="@id/button_star"/>

    <SeekBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/button_star"
        android:layout_toStartOf="@id/button_star"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:progress="50"
        android:layout_alignBaseline="@id/button_star"
        android:id="@+id/seekbar" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

以下是听众:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_activity);

    prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
    starred = prefs.getBoolean("starred", false);

    final ImageButton starButton = (ImageButton) findViewById(R.id.button_star);
    starButton.setImageDrawable(ContextCompat.getDrawable(this, (starred ? R.drawable.star_filled :
            R.drawable.star_empty)));

    starButton.setOnClickListener(new View.OnClickListener() …
Run Code Online (Sandbox Code Playgroud)

android input

16
推荐指数
1
解决办法
464
查看次数

Android OpenGL透明纹理绘制黑色

我正试图在我的应用程序中绘制透明纹理(文本).奇怪的是,它适用于最新的Nexus 7和我的第二代Moto X,但在最初的Nexus 7上,纹理只是黑色.我已启用混合,纹理为512x512,因此它不是二次幂的问题.我也只是使用GL10,应该支持所有东西,对吗?纹理不能仅仅在这个设备上工作的任何原因?

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
// text drawn here
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_BLEND);
Run Code Online (Sandbox Code Playgroud)

这是纹理初始化,我加载纹理图集:

public void loadGlyphs(GL10 gl, Context context) {
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.text_bitmap);
    gl.glGenTextures(1, textures, 0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

    bitmap.recycle();
}
Run Code Online (Sandbox Code Playgroud)

Top显示旧Nexus 7上发生的情况.底部图片是Moto X.

坏

好

编辑:这是一个完整的例子.没有透明度,不会在旧的Nexus 7上绘制任何东西.如果我摆脱纹理的东西,它就像它应该的那样绘制白色的正方形.

MainActivity.java

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;


public class MainActivity extends Activity {

    private GLSurfaceView glView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        glView = new TestView(this);
        setContentView(glView);
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

transparency android textures opengl-es

12
推荐指数
1
解决办法
2083
查看次数

Android垃圾收集器释放内存

我正在开发一个处理大量分配的应用程序(大约400万个双打和100万个类).我正在查看垃圾收集器日志,我看到不同设备上释放的内存总量不同.

例如,我有一个Moto X(2014)最终释放超过312 MB.我还有一个Droid Bionic在相同的数据上运行相同的代码,平均释放616 MB.两个设备最终的堆大小约为50 MB.

为什么Bionic上的GC释放的内存比Moto X多?他们应该生成相同数量的垃圾.垃圾收集器幕后发生了什么?Moto X在Android 5.1上,Bionic在4.1.2上.

编辑:我有四个可以释放大约300 MB RAM的设备:Moto X(2014),Nexus 7 2013,Nexus 7 2012和Razr i.所有这四个都使用ART.Bionic正在运行Dalvik运行时.这是为什么没有那么放松了?我注意到GC_FOR_ALLOC在ART中没有发生,但在Dalvik上一直被调用.

memory android garbage-collection android-runtime

11
推荐指数
1
解决办法
605
查看次数

Android BatteryManager替代品

我正试图在我的应用程序中获取电池统计信息以进行一些基准测试.精彩的BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER让我可以查询设备的微型放大器.但是,这仅在API 21中引入,因此可以达到的设备数量非常有限.是否有兼容的方法在较低版本的API(低至4.0)中执行类似的操作?我知道BatteryManager.EXTRA_LEVEL会给我百分比,但这真的不是细粒度的.

android battery usage-statistics

8
推荐指数
1
解决办法
1478
查看次数

在具有Java正则表达式问题的组之间插入连字符

我正在进行测试以查找并替换一个由3或4个大写字母组成的字符串,后跟一个带有相同字符串,连字符和相同数字的数字.在Perl中,我可以使用:

s/([A-Z]{3,4})([0-9])/$1-$2/g;
Run Code Online (Sandbox Code Playgroud)

我在Java中试过这个,硬编码如下字符串:

public class Test {
    public static void main(String[] args) {
        String test = "TEST1";

        Pattern p = Pattern.compile("([A-Z]{3,4})([0-9])");

        Matcher m = p.matcher(test);
        if (m.find()) {
            m.replaceAll(m.group(1) + "-" + m.group(2));
        }
        System.out.println(test);

    }
}
Run Code Online (Sandbox Code Playgroud)

但没有找到匹配.我的Java语法是错误的还是正则表达式问题?

java regex

5
推荐指数
1
解决办法
483
查看次数

Android日历事件更新SQLiteException

我在更新日历事件时遇到了一些麻烦。这是我用来插入它的代码:

long calID = 1;
long startMillis = 0;
long endMillis = 0;
Calendar beginTime = Calendar.getInstance();
startMillis = beginTime.getTimeInMillis()+5000;
endMillis = startMillis+1000;
ContentResolver cr = getContext().getContentResolver();
values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, startMillis);
values.put(CalendarContract.Events.DTEND, endMillis);
values.put(CalendarContract.Events.TITLE, getReminder());
values.put(CalendarContract.Events.DESCRIPTION, getNote());
values.put(CalendarContract.Events.CALENDAR_ID, calID);
values.put(CalendarContract.Events.EVENT_TIMEZONE, "America/Chicago");
values.put(CalendarContract.Events.HAS_ALARM, 1);
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
long eventID = Long.parseLong(uri.getLastPathSegment());
Log.wtf("EventID", "" + eventID);
Run Code Online (Sandbox Code Playgroud)

在我的日志中,我得到一个事件ID(例如10)。然后,我尝试在之后立即更新:

values = new ContentValues();
Uri updateUri = null;
values.put(CalendarContract.Events.TITLE, "TESTING");
updateUri = ContentUris.withAppendedId(CalendarContract.Events.CONTENT_URI, eventID);
int rows = cr.update(updateUri, values, null, null); …
Run Code Online (Sandbox Code Playgroud)

android calendar

5
推荐指数
0
解决办法
603
查看次数