如题,在监听触碰事件时,如果快速滑动,回调的action_up会抢占action_move中的代码先执行,导致读取脏数据,这样应该如何解决呢?(如果滑动慢的话不会出现这个问题)
如题,在监听触碰事件时,如果快速滑动,回调的action_up会抢占action_move中的代码先执行,导致读取脏数据,这样应该如何解决呢?(如果滑动慢的话不会出现这个问题)
除了ACTION_DOWN
,ACTION_MOVE
,ACTION_UP
还有很多其他的状态,题主的代码编写习惯很不好.
你应该在每个Case
后break
下,如果你的default
里的代码是执行UP逻辑建议放在ACTION_UP
中,
你所说的脏数据应该是其他的MOVE
状态引入的.你可以查看MotionEvent
的其他状态所代表的含义,MotionEvent官方文档
建议你的代码更改为:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
Log.i("MotionEvent.ACTION_DOWN","MotionEvent.ACTION_DOWN");
previousY = event.getRawY();
invalidate();
break;
case MotionEvent.ACTION_MOVE:
Log.i("MotionEvent.ACTION_MOVE","MotionEvent.ACTION_MOVE");
scorllY = scorllY+previousY-event.getRawY();
Log.i("scorllY",scorllY+"");
previousY = event.getRawY();
invalidate();
break;
case MotionEvent.ACTION_UP:
Log.i("MotionEvent.ACTION_UP","MotionEvent.ACTION_UP");
isAdjust = true;
Log.i("action_UP", (358 - currenttranslateY) + "");
adjustY = 358 - currenttranslateY;
adjustAnimaor.setFloatValues(0, adjustY);
adjustAnimaor.start();
break;
}
return true;
}
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
这里是onTouchEvent代码,当发生move事件时,获取触碰坐标,并计算滑动距离,之后重绘,在onDraw()里计算一个currenttranslateY(整体偏移距离)。发生up事件时,根据currenttranslateY来启动一个属性动画。但是如果快速滑动,move里的重绘事件并没有执行到计算currenttranslateY就已经拦截到up事件,开始利用脏的currenttranslateY来开始属性动画。
请问这里我该如何才能正确的来做呢?