ACTION_CANCEL没有被解雇

时间:2013-10-21 15:33:46

标签: android android-custom-view ontouchevent ontouchlistener

我实现了一个customView,可以在触摸和释放视图时添加一些动画。 当用户单击此视图时,我会启动一个80ms的小动画,缩小视图。

当手指向上时,播放相同的动画(反向效果)。 视觉效果很好,只要用户不通过移动手指离开视图,它就能正常工作。

因此,当手指离开视图区域时,我无法调用ACTION_CANCEL,这在我的情况下需要播放动画。

正确调用ACTION_UP,ACTION_MOVE和ACTION_DOWN,但从不ACTION_CANCEL

这是我的代码:

@Override
public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    switch (event.getAction()) {
        case MotionEvent.ACTION_CANCEL: {
            Animation anim = new ScaleAnimation(0.9f, 1f, 0.9f, 1f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            anim.setDuration(Utils.ANIM_CLICK_LENGHT);
            anim.setFillAfter(true);
            anim.setFillBefore(true);
            startAnimation(anim);
            break;
        }
        case MotionEvent.ACTION_DOWN: {
            Animation anim = new ScaleAnimation(1f, 0.9f, 1f, 0.9f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            anim.setDuration(Utils.ANIM_CLICK_LENGHT);
            anim.setFillAfter(true);
            anim.setFillBefore(true);
            startAnimation(anim);
            break;
        }
        case MotionEvent.ACTION_UP: {
            Animation anim = new ScaleAnimation(0.9f, 1f, 0.9f, 1f,
            Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            anim.setDuration(Utils.ANIM_CLICK_LENGHT);
            anim.setFillAfter(true);
            anim.setFillBefore(true);
            startAnimation(anim);
            break;
        }
    }
    return true;
}

1 个答案:

答案 0 :(得分:3)

检查此答案:https://stackoverflow.com/a/20160587/1576319

它详细解释了为什么ACTION_CANCEL未在API> 16中启动并提供快速解决方法。