以下是2个截图,它们没有相同的大小,因为左边是来自设备右侧的模拟器。应该从设备中取出两个,对不起。
两者都使用相同的drawable。
左:布局中设置的背景:
<ImageButton
android:id="@+id/backFromOldCurves"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/backunpressed"
android:paddingLeft="10sp"
android:paddingRight="10sp"
android:src="@drawable/navigationpreviousitem" />
右:在ACTION_UP上的onTouch中动态设置背景:
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backpressed));
}
if (event.getAction() == MotionEvent.ACTION_UP) {
v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backunpressed));
onClick(v);
}
return true;
}
在setBackgroundDrawable中将Drawable转换为NinePatchDrawable不起作用。 我怎么能解决这个问题?
答案 0 :(得分:1)
为什么不使用
v.setBackgroundResource(R.drawable.backpressed);
编辑:不要在onTouch()中返回true。返回false,当触发MotionEvent.ACTOIN_UP时,您不必调用onClick()。
public boolean onTouch(final View v, final MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackgroundResource(R.drawable.backpressed);
case MotionEvent.ACTION_UP:
v.setBackgroundResource(R.drawable.backunpressed);
default:
Thread.sleep(50); // sleep for performance, otherwise you'd get flooded with ACTION_MOVE
}
return false; // return false to not consume the event
}