Android: 如何判断一个view是按下还是松开?

Android: How to determine if a view is pressed or released?

我知道有一个MotionEvent,但这是不同的情况:我想让一个View在我触摸它的时候变得越来越大,然后逐渐缩小到原来的样子如果我不再按 View.

大小

onTouchEvent 仅在我第一次按下 View 时调用 (ACTION_DOWN);释放 View(ACTION_UP);或擦洗我的手指(ACTION_MOVE)。他们对我的案子没有帮助。所以我想知道,是否有任何优雅的解决方案,而不是像计时器一样使用来解决低级别的问题?

不,没有真正优雅的方法来做到这一点(如果您认为使用计时器不雅)。但我不会真的担心使用这些解决方案。您可以这样做(假设 view 是您正在制作动画的 View):

  1. 添加字段(到管理您的 View 的东西 - ActivityFragment):

private static final float SCALE_FACTOR = 0.2f;
private static final long STEP_DELAY = 300;
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        view.animate().scaleXBy(SCALE_FACTOR).scaleYBy(SCALE_FACTOR);
        handler.postDelayed(runnable, STEP_DELAY);
    }
};
  1. 为您设置一个 OnTouchListener View:

view.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                handler.postDelayed(runnable, STEP_DELAY);
                return true;
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
                userImage.animate().cancel();
                handler.removeCallbacks(mRunnable);
                return false;
        }
        return true;
    }
});

调整 SCALE_FACTORSTEP_DELAY 以完全满足您的需求。