And*_*lén 4 java android ontouchlistener android-animation onclicklistener
我在构建自定义按钮时遇到了一些问题.它由一个盒子和下面的一条小线组成.
当您按下按钮时,该按钮会垂直向下动画,当您释放时按钮会再次向上动画.这在CustomButton.class中处理:
super.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
buttonContent.startAnimation(rectMoveDown);
colorDown.start();
return false;
}
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
buttonContent.startAnimation(rectMoveUp);
colorUp.start();
return false;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
然后在应用程序的其余部分中,我使用此按钮并为其设置clicklistener.因此我返回false(我认为这至少是正确的)因为我不想使用该事件,而是将其传递给层次结构中的clicklistener.
但是,当我第一次按下按钮,将手指移到按钮外面然后释放屏幕时,问题就出现了.然后该按钮不显示在ACTION_UP侦听器中完成的动画.
有没有人知道如何解决这个问题?
经过一些更多测试后我发现了如何解决它!
在文档中阅读了更多内容后,我发现MotionEvent.ACTION_CANCEL正是我所需要的:
当前手势已中止.你不会再收到任何积分.您应将此视为一个up事件,但不执行您通常会执行的任何操作.
所以现在我的TouchListener看起来像这样(并且它的工作原理应该如此):
super.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
buttonContent.startAnimation(rectMoveDown);
colorDown.start();
return false;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
buttonContent.startAnimation(rectMoveUp);
colorUp.start();
return false;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
并不是我开始使用解决它的switch-case,但我改为使用以使代码看起来更好.如您所见,我以完全相同的方式处理ACTION_UP和ACTION_CANCEL.
我到处都返回false,以便OnClickListener触发,如果我返回true则不会触发它.
| 归档时间: |
|
| 查看次数: |
1286 次 |
| 最近记录: |