我有一个列表视图,每个列表项包含一个按钮(上面有文本)和一个图像。我试图在用户触摸listitem并向左或向右移动手指时实施滑动滑动效果。这是我在 onIntercetTouchEvent
case MotionEvent.ACTION_DOWN:
mDownX=motionEvent.getX();
Log.i(TAG, "onInterceptTouchEvent.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
float deltaX=motionEvent.getX()-mDownX;
int mSwipingSlop=deltaX>0?mSlop:-mSlop;
this.setTranslationX(deltaX-mSwipingSlop);
Log.i(TAG, "onInterceptTouchEvent.ACTION_MOVE");
break;
有效。但问题是当滑动发生时会产生模糊效果。即使我在一个方向上滑动,视图中的按钮似乎来回移动非常快,从而产生模糊效果。
谁能告诉我们这里的问题和可能的解决方案?
为ACTION_MOVE打印deltaX的值
:
onInterceptTouchEvent.ACTION_DOWN
\ onInterceptTouchEvent.ACTION_MOVE---13.481277
onInterceptTouchEvent.ACTION_MOVE---4.9546204
\onInterceptTouchEvent.ACTION_MOVE---16.477112
onInterceptTouchEvent.ACTION_MOVE---30.629227
onInterceptTouchEvent.ACTION_MOVE---33.33777
onInterceptTouchEvent.ACTION_MOVE---53.111282
onInterceptTouchEvent.ACTION_MOVE---53.15001
onInterceptTouchEvent.ACTION_MOVE---74.20006
onInterceptTouchEvent.ACTION_MOVE---75.70354
onInterceptTouchEvent.ACTION_MOVE---94.25169
onInterceptTouchEvent.ACTION_MOVE---95.33977
onInterceptTouchEvent.ACTION_MOVE---116.58623
onInterceptTouchEvent.ACTION_MOVE---117.084274
onInterceptTouchEvent.ACTION_MOVE---140.37877
onInterceptTouchEvent.ACTION_MOVE---137.01903
onInterceptTouchEvent.ACTION_MOVE---157.82243
onInterceptTouchEvent.ACTION_MOVE---152.6262
onInterceptTouchEvent.ACTION_MOVE---172.87059
onInterceptTouchEvent.ACTION_MOVE---165.39714
onInterceptTouchEvent.ACTION_MOVE---182.45793
onInterceptTouchEvent.ACTION_MOVE---174.23326
onInterceptTouchEvent.ACTION_MOVE---190.94212
onInterceptTouchEvent.ACTION_MOVE---182.86662
onInterceptTouchEvent.ACTION_MOVE---196.75847
答案 0 :(得分:1)
我已经重现了这个问题,这似乎有用:代替setTranslationX(deltaX-mSwipingSlop)
,使用setX(getX() + deltaX-mSwipingSlop)
。
使用getRawX()
代替getX()
也可以,但需要一些额外的计算才能适应第二种手势。
我不完全确定为什么会出现这种情况。