Android 更改ImageButton行为
使用此选择器XML文件:Android 更改ImageButton行为,android,imagebutton,Android,Imagebutton,使用此选择器XML文件: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/z01_pressed" /> <!-- pressed --&g
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/z01_pressed" /> <!-- pressed -->
<item android:state_active="true"
android:drawable="@drawable/z01_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/z01_pressed" /> <!-- focused -->
<item android:drawable="@drawable/z01" /> <!-- default -->
</selector>
我可以在Android中修改它(或使用编程方式)来实现这一点吗:
当您单击并按住一个ImageButton并将手指移动到另一个ImageButton时,另一个按钮将获得效果(按压效果),第一个按钮将返回其正常状态
所以,如果你在屏幕上有多个按钮,你把手指放在上面,当手指在上面时,每个按钮都会得到按下的效果
这可以用XML实现吗?密码?在API 4中?或以上?
这可能吗
谢谢您可以为每个按钮使用onTouchListener和Region对象。首先,您需要找到每个按钮的大小,以便能够确定区域对象的大小: 编辑:
可以通过为每个按钮使用onTouchListener和Region对象来实现这一点。首先,您需要找到每个按钮的大小,以便能够确定区域对象的大小: 编辑:
对于可能感兴趣的人:
在API级别4下,我无法找到问题的解决方案。所以,我放弃了 对于可能感兴趣的人:
在API级别4下,我无法找到问题的解决方案。所以,我放弃了 如果我点击并按住一个按钮,然后移动到另一个按钮上,最后一个按钮就不会被点击。这就是我想要的谢谢你的回答。问题是我的按钮不是矩形的。它们是带有源图像的
ImageButton
,以及bakground=“@null”
。我确信这段代码对常规按钮有效。你认为这对我的按钮有用吗?没有解决它:(.请看我在这里的第二条评论。我说,当你点击按钮1并按住手指然后移动到按钮2上时,我不会让按钮2变为点击状态
。我希望现在这是清楚的。如果我点击并按住一个按钮,然后移动到另一个按钮上,最后一个按钮从未被点击过。这就是我想感谢你的答案。问题是我的按钮不是矩形。它们是带有源图像的ImageButton
,并且bakground=“@null”
。我确信此代码适用于常规按钮。您认为这适用于我的按钮吗?没有解决此问题:(.请看我在这里的第二条评论。我说,当你点击按钮1并握住手指然后移动到按钮2上时,我不会让按钮2变为点击状态。
。我希望这一点现在清楚了。
final ImageButton button = (ImageButton) findViewById(R.id.imagebutton);
int width = 128; // The width of the button
int height = 64; // The height of the button
int[] pos = new int[2];
button.getLocationInWindow(pos);
final ImageButton button2 = (ImageButton) findViewById(R.id.imagebutton2);
int width2 = 128; // The width of the button
int height2 = 64; // The height of the button
int[] pos2 = new int[2];
button2.getLocationInWindow(pos2);
final Region region2 = new Region(pos2[0], pos2[1], pos2[0] + width, pos2[1] + height);
button.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
if(region1.contains((int)event.getX(), (int)event.getY())) {
button.setImageResource(R.drawable.z01_pressed);
button2.setImageResource(R.drawable.z01);
} else if(region2.contains((int)event.getX(), (int)event.getY())) {
button2.setImageResource(R.drawable.z01_pressed);
button.setImageResource(R.drawable.z01);
else {
button.setImageResource(R.drawable.z01);
button2.setImageResource(R.drawable.z01);
}
}
else {
button.setImageResource(R.drawable.z01);
button2.setImageResource(R.drawable.z01);
}
return false;
}
});