После касания 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;
        }
    });

2 ответа

Решение

Вы должны использовать getActionMasked() вместо getAction ().

getAction () возвращает действие с информацией указателя, в то время как getActionMasked() возвращает только простое действие, которое заставляет сравнение действия работать правильно.

Тогда поймайте правильное действие в методе 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;
}

Возвращаемое значение должно быть истинным в большинстве случаев. Смотрите эту статью.

Создайте XML-файл в папке Drawable с именемchange.xml вашего приложения и введите ниже коды. Модифицируйте его с помощью ваших цветовых кодов.

 <?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"
Другие вопросы по тегам