Кнопка Android onTouch(), если возвращает true, не имеет эффекта анимации клика; если возвращает false, имеет эффект анимации клика

Я наблюдаю это странное поведение, пожалуйста, помогите мне разобраться!

Я просто установил onTouchListner для кнопки. Для onTouch() обратный вызов, если я установил его, верните false, когда я нажимаю на кнопку, я вижу эффект анимации щелчка кнопки (просто изменение цвета); Однако, если я установлю его, верните true, когда я нажму на кнопку, эффект анимации щелчка просто исчезнет.

Ниже приведен код

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn = findViewById(R.id.btn);
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.setClickable(true);
                Log.d("myTrack", "onTouch");
                return true;  // I cannot see the animation effect when click
                return false; // I can see the animation effect when click
            }
        });
    }
}

1 ответ

Я наблюдаю это странное поведение, пожалуйста, помогите мне разобраться!

Это стандартное поведение Android.

Если вы вернетесь true из ACTION_DOWN событие вас интересует остальные события в этом жесте. "Жест" в этом случае означает все события до финала ACTION_UP или же ACTION_CANCEL, возврате false из ACTION_DOWN означает, что вы не хотите событие, и другие представления будут иметь возможность обработать его. Если у вас перекрывающиеся представления, это может быть одноуровневое представление. Если нет, то это будет пузыриться до родителя.

Поэтому, когда вы вернетесь true, вы сказали Android, что вы обработали все события, и это не имеет ничего общего с. Так что вы даже не видите никаких волновых эффектов.

Другие вопросы по тегам