我遇到按钮点击事件和搜索栏事件未触发的问题.当我在我的搜索栏上拖动时,滑块会直观地改变位置,但是我的搜索没有被触发的事件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) 我正试图在我的应用程序中绘制透明纹理(文本).奇怪的是,它适用于最新的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) 我正在开发一个处理大量分配的应用程序(大约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上一直被调用.
我正试图在我的应用程序中获取电池统计信息以进行一些基准测试.精彩的BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER让我可以查询设备的微型放大器.但是,这仅在API 21中引入,因此可以达到的设备数量非常有限.是否有兼容的方法在较低版本的API(低至4.0)中执行类似的操作?我知道BatteryManager.EXTRA_LEVEL会给我百分比,但这真的不是细粒度的.
我正在进行测试以查找并替换一个由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语法是错误的还是正则表达式问题?
我在更新日历事件时遇到了一些麻烦。这是我用来插入它的代码:
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)