完成触摸 ImageView 后

after finishing touching ImageView

我想制作一个 ImageView 吗?当我触摸它时它会改变背景,当我将手指拖离它时它会变得正常我不知道该怎么做,谢谢

 imgButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            cmp++;
            txt2.setText(" " + cmp);
            //Quant on touche l'image :
            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
                imgButton.getDrawable().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
            }
            // si Je bouge le dois sur l'image et ....
            if (event.getActionMasked() == MotionEvent.ACTION_MOVE) {
                //... et que le doit quitte l'image
                if (event.getX() < 0 || event.getX() > v.getWidth() || event.getY() < 0 || event.getY() > v.getHeight()) {
                    imgButton.getDrawable().setColorFilter(0x00000001, PorterDuff.Mode.SRC_ATOP);
                }
                if (event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight()) {
                    // ... et que le doit revient vers L'image
                    imgButton.getDrawable().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
                }
            }
            // Si je lève le doits et...
            if (event.getActionMasked() == MotionEvent.ACTION_UP) {
                // .... sur l'image :
                if (event.getX() > 0 && event.getX() < v.getWidth() && event.getY() > 0 && event.getY() < v.getHeight()) {
                    //Finger back to the view
                    imgButton.getDrawable().setColorFilter(0x00000001, PorterDuff.Mode.SRC_ATOP);
                    Intent i = new Intent(MainActivity.this, game.class);
                    startActivity(i);
                }
            }
            return true;
        }
    });

在您的应用程序名为 change.xml 的可绘制文件夹下创建一个 xml 文件,并将您的颜色代码放在 codes.Modify 下面。

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true">
      <color android:color="#00FF00"/>
   </item>
   <item android:state_pressed="false">
      <color android:color="#00FFFF"/>
   </item>
</selector>

并将以下属性添加到布局的 ImageView

android:background="@drawable/change"

您应该使用 getActionMasked() 而不是 getAction()

getAction() returns 带有指针信息的动作而 getActionMasked() 只有 returns 简单动作,这使得动作比较工作正常。

然后在onTouch方法中捕捉正确的动作。

public boolean onTouch(View v, MotionEvent event) {
    if(event.getActionMasked()==MotionEvent.ACTION_DOWN) {
        //Finger down
        //Change the color
    }
    if(event.getActionMasked()==MotionEvent.ACTION_MOVE) {
        if(event.getX()<0 || event.getX()>v.getWidth() || event.getY()<0 || event.getY()>v.getHeight()){
            //Finger exit the view
            //Change the color back
        }
    }
    if(event.getActionMasked()==MotionEvent.ACTION_UP) {
        //Finger up
        //Change the color back
    }
    return true;
}

大多数情况下返回值应该是true。参见 this article