鉴于Android的ListView中刷卡时来回移动 [英] View moves back and forth when swiping in listview in android

查看:171
本文介绍了鉴于Android的ListView中刷卡时来回移动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有包含按钮(上面有一文)每个列表项和图像的列表视图。我想实现当用户触摸列表项和移动他的手指向左或向右滑动一个刷卡的效果。这是我的code onIntercetTouchEvent

 情况下MotionEvent.ACTION_DOWN:
                mDownX = motionEvent.getX();
                Log.i(TAGonInterceptTouchEvent.ACTION_DOWN);
                打破;
            案例MotionEvent.ACTION_MOVE:
                浮DELTAX = motionEvent.getX() - mDownX;
                INT mSwipingSlop = DELTAX大于0 mSlop:-mSlop;
                this.setTranslationX(DELTAX-mSwipingSlop);
                Log.i(TAGonInterceptTouchEvent.ACTION_MOVE);
                打破;

它的工作原理。但问题是,有当刷卡发生模糊效果。即使我在一个方向我刷卡,视图按钮似乎来回移动速度非常快,从而使模糊效果。搜索结果谁能告诉什么是这里的问题和可能的解决方案吗?
搜索结果
在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


解决方案

我已复制了问题,这似乎工作:而不是 setTranslationX(DELTAX-mSwipingSlop)使用 setX的(的getX()+ DELTAX-mSwipingSlop)

使用 getRawX()而不是的getX()工作为好,但需要一些额外的计算以适应第二个手势。

我不完全知道为什么,虽然出现这种情况。

I have a list view with each list item containing a button (with a text on it) and an image. I am trying to implement swiping a swiping effect when the user touches the listitem and moves his finger to the left or right. This is my code in 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;

It works. But the problem is that there is a blurring effect when the swiping is happening. Even though I am swiping in one direction, button in the view seems to move back and forth very fast and thus giving a blurring effect.

Can anyone tell what is the problem here and a possible solution?

Printing value of deltaX in for ACTION_MOVE

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

解决方案

I have reproduced the problem, and this seems to work: instead of setTranslationX(deltaX-mSwipingSlop), use setX(getX() + deltaX-mSwipingSlop).

Using getRawX() instead of getX() works as well, but needs some extra calculations to accommodate for second gestures.

I am not entirely sure why this behavior occurs though.

这篇关于鉴于Android的ListView中刷卡时来回移动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆