Gallery通过onFling设置滑动

设置滑动方法:

myGallery.onFling(null, null, -2000, 0);

第三个参数,数值是滑动距离
正数时:向左切换,
负数时:向右切换

看源码发现,除了第三个参数其他三个参数都无用

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        
        if (!mShouldCallbackDuringFling) {
            // We want to suppress selection changes
            
            // Remove any future code to set mSuppressSelectionChanged = false
            removeCallbacks(mDisableSuppressSelectionChangedRunnable);

            // This will get reset once we scroll into slots
            if (!mSuppressSelectionChanged) mSuppressSelectionChanged = true;
        }
        
        // Fling the gallery!
        mFlingRunnable.startUsingVelocity((int) -velocityX);
        
        return true;
    }

总结下,为什么其他三个参数无效

1.先说第四个参数

Gallery,第一句描述就是A view that shows items in a center-locked, horizontally scrolling list

翻译:一个锁定竖直方向,水平方向滑动的列表view

第四个参数是设置竖直方向滑动距离,不符合锁定竖直方向这一条。所以也没用了

2.第一和第二个参数:
首先onFling方法中最终执行的代码是下边这句,

 mFlingRunnable.startUsingVelocity((int) -velocityX);

源码中的startUsingVelocity方法

  		@UnsupportedAppUsage
        public void startUsingVelocity(int initialVelocity) {
            if (initialVelocity == 0) return;
            
            startCommon();
            
            int initialX = initialVelocity < 0 ? Integer.MAX_VALUE : 0;
            mLastFlingX = initialX;
            mScroller.fling(initialX, 0, initialVelocity, 0,
                    0, Integer.MAX_VALUE, 0, Integer.MAX_VALUE);
            post(this);
        }

这个方法里最终调用的是Scrollerfling方法

这里int initialX = initialVelocity < 0 ? Integer.MAX_VALUE : 0;

这里设置了起始位置,是最大值还是0,

所以不需要第一 第二个参数的MotionEvent, 来提供水平的位置信息,而竖直方向不能滑动,所以也不需要。

所以你要是使用GalleryonFling方法,只要传第三个参数就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crazy丶code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值