更改ImageButton行为

时间:2011-07-05 07:30:32

标签: 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 -->

 <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中?或以上?

这甚至可能吗?

谢谢

2 个答案:

答案 0 :(得分:1)

对于那些可能感兴趣的人:

我无法在API级别4下找到我的问题的解决方案。所以,我放弃了!

答案 1 :(得分:0)

您可以通过为每个按钮使用onTouchListener和Region对象来完成此操作。首先,您需要找到每个按钮的大小,以便能够确定Region对象的大小:

编辑:

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