У меня следующая проблема: я создал новый класс, расширяющий ConstraintLayout, и переопределяю функцию onTouchEvent для анимации макета.
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(this, "scaleX", 0.85f);
ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(this, "scaleY", 0.85f);
scaleDownX.setDuration(100);
scaleDownY.setDuration(100);
AnimatorSet scaleDown = new AnimatorSet();
scaleDown.play(scaleDownX).with(scaleDownY);
scaleDown.start();
break;
case MotionEvent.ACTION_CANCEL:
Log.d("arne", "CANCEL");
// Beide Cases lösen das Event aus
// ACTION_CANCEL minimiert den Button auch, wenn man den Knopf nicht loslässt, sondern weg wischt
case MotionEvent.ACTION_UP:
ObjectAnimator scaleUpX = ObjectAnimator.ofFloat(this, "scaleX", 1f);
ObjectAnimator scaleUpY = ObjectAnimator.ofFloat(this, "scaleY", 1f);
scaleUpX.setDuration(100);
scaleUpY.setDuration(100);
AnimatorSet scaleUp = new AnimatorSet();
scaleUp.play(scaleUpX).with(scaleUpY);
scaleUp.start();
break;
}
return super.onTouchEvent(event);
}
Это работает безупречно для кнопок, и если я удерживаю кнопку нажатой, событие срабатывает несколько раз в секунду.
Но в ConstraintLayout он срабатывает только один раз, точно так же, как событие onClick.
Это немного утомительно в моем понимании.
У вас есть решение этой проблемы?