【问题标题】:Change ImageButton Behaviour更改 ImageButton 行为
【发布时间】:2012-01-12 08:35:10
【问题描述】:

拥有这个选择器 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 中?或以上?

这可能吗?

谢谢

【问题讨论】:

    标签: android imagebutton


    【解决方案1】:

    致那些可能感兴趣的人:

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

    【讨论】:

      【解决方案2】:

      您可以通过为每个按钮使用 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;
        }
      });
      

      【讨论】:

      • 如果我单击并按住一个按钮并移过另一个按钮,则最后一个按钮从未被单击过。这就是我想要的
      • 感谢您的回答。问题是我的按钮不是矩形。它们是带有源图像的ImageButtonbakground="@null"。我确信这段代码适用于常规按钮。你认为这适用于我的按钮吗?
      • 没解决 :( 。在这里查看我的第二条评论。我说的是when you click button1 and hold your finger then you move over button2 , I wont the button2 to change to clicked state。我希望现在清楚了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多