android魅族手机Pro6 Android7.1.1 点击状态栏滚到顶部Bug

我在自己的项目中,写了一个下拉刷新的自定义View-----RefreshLayout,继承自LinearLayout,原理是往该控件中添加头部刷新的View和内容的View,让刷新的头部View通过调用scrollTo(0,headViewHeight)方法滚动相应的位置使得头部View隐藏,只显示出内容View。

但在魅族手机Pro6 Android7.1.1 发现点击状态栏会自动滚回到顶部。应该是该魅族系统下提供了该功能,因为在其他手机中没有发现,还没研究过相应的系统代码。在滚回顶部的过程中,经过分析,发现其自动调用scrollTo(0,0)方法滚回到顶部,使得我的刷新的头部View显示了出来。为了不让其自动调用scrollTo(0,0)方法,我用了以下思路解决,仅提供该思路参考,大神们可以指出问题或更好的解决方案哈。

/**
     * 是否禁止滚动
     */
    private boolean isBanScroll = false;
    /**
     * 计算垂直方向滚动偏移。
     *
     * @return
     */
    @Override
    protected int computeVerticalScrollOffset() {//先计算完偏移量,才调用scrollTo方法
        isBanScroll = true;
        return super.computeVerticalScrollOffset();
    }

    @Override
    public void scrollTo(int x, int y) {
        if (!isBanScroll) {//不禁止时才滚动
            super.scrollTo(x, y);
        }


    }
通过上面的控制,可以让系统不自动调用 scrollTo(0,0)方法,isBanScroll 参数可以在onInterceptTouchEvent方法中置为false。

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            downY = event.getY();
            downX = event.getX();
           
            isBanScroll = false;
           
            break;
    }
    return super.onInterceptTouchEvent(event);
}
完美解决了LinearLayout自动调用 scrollTo(0,0)方法滚动到顶部,同时不影响点击状态栏recyclerview自动滚回顶部。

猜你喜欢

转载自blog.csdn.net/as36331233/article/details/79089569