1

我与这个问题斗争了很长时间,却没有在任何地方找到解决方案。我有一个包含一些 RatingBars 的 ListView。每次我想滚动并意外点击评级栏时,都会执行评级而不是滚动。现在我找到了一个简单的解决方案:我编写了自己的 RatingBar:

public class ScrollableRatingBar extends RatingBar {

    public ScrollableRatingBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public ScrollableRatingBar(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ScrollableRatingBar(Context context) {
        super(context);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN: {
            return true;

        }
        case MotionEvent.ACTION_MOVE: {
            return true;
        }
        }
        return super.dispatchTouchEvent(ev);

    }

}

会发生什么:如果您单击 RatingBar,则会出现 3 个不同的 MotionEvents:
-Action_DOWN:放下手指
-Action_MOVE:移动手指
-Action_UP:抬起手指

您不想将评级设置为“向下”或“移动”操作。所以只要返回 true 就表示它已经发生了。如果出现“up”,则程序本身会有所不同,它是滚动还是评级,这取决于您所做的。

就这样!我希望有人帮助。

编辑:我意识到这是 Android 2.3.7 及更低版本的问题。

4

0 回答 0