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