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
):
- 添加字段(到管理您的
View
的东西 - Activity
或 Fragment
):
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);
}
};
- 为您设置一个
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_FACTOR
和 STEP_DELAY
以完全满足您的需求。
我知道有一个MotionEvent
,但这是不同的情况:我想让一个View
在我触摸它的时候变得越来越大,然后逐渐缩小到原来的样子如果我不再按 View
.
onTouchEvent
仅在我第一次按下 View
时调用 (ACTION_DOWN
);释放 View
(ACTION_UP
);或擦洗我的手指(ACTION_MOVE
)。他们对我的案子没有帮助。所以我想知道,是否有任何优雅的解决方案,而不是像计时器一样使用来解决低级别的问题?
不,没有真正优雅的方法来做到这一点(如果您认为使用计时器不雅)。但我不会真的担心使用这些解决方案。您可以这样做(假设 view
是您正在制作动画的 View
):
- 添加字段(到管理您的
View
的东西 -Activity
或Fragment
):
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);
}
};
- 为您设置一个
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_FACTOR
和 STEP_DELAY
以完全满足您的需求。