Android 更改ImageButton行为

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文件:

 <?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;
  }
});