Благодаря моему исследованию вопроса о том, как подключить слушателей кнопок к действиям и фрагментам, общий ответ заключается в том, чтобы связать вашего слушателя и внедрить его в каждый фрагмент / действие.
Однако, пока ваш слушатель generi c (или глобальный, затрагивающий все кнопки), это избыточно.
Итак, войдите в идею реализации 2: я мог бы расширить свой собственный класс Button и реализовать слушатель OnTouch. Звучит великолепно в теории, но я не уверен, как на самом деле установить слушателя в это состояние. Это на правильном пути, или есть лучший способ, который я здесь скучаю? Единственный другой вариант, о котором я подумал, - это создание другого класса, реализующего слушателя, но я не хотел создавать экземпляр класса каждый раз, когда создаю новую кнопку.
Это моя идея:
public final class EffectsButton extends androidx.appcompat.widget.AppCompatButton implements View.OnTouchListener {
public EffectsButton(Context context) {
super(context);
}
public EffectsButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
handleButtonEffect(v, "onTouch.down");
else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL)
handleButtonEffect(v, "onTouch.up");
return false;
}
public static void handleButtonEffect(View view, String listenerType) {
if (listenerType.equals("onTouch.down")) {
view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP);
} else if (listenerType.equals("onTouch.up") || listenerType.equals("onClick")) {
view.getBackground().clearColorFilter();
}
view.invalidate();
}
}
Основная деятельность:
// onCreate();
MyButton button = findViewById(R.id.mybutton);
button.setOnTouchListener(/* what to do here? */);