首页 > 解决方案 > 如何在内部 SeekBar 上禁用 ScrollView 的工作?

问题描述

例如,当我移动 circleseekbar 滑块时,滚动视图也起作用,从而将整个布局向上移动,我只需要能够更改滑块的位置。

试过了android:scrollbars = "none"- 一切都失败了。

标签: androidscrollviewseekbar

解决方案


您需要ScrollView在完成操作后暂时停止滚动并重新启用它SeekBar

要实现这一点:不要使用ScrollView,而是使用以下自定义的,其中 Overriding 起到onInterceptTouchEvent了作用。

public class LockableScrollView extends ScrollView {

    // true if we can scroll (not locked)
    // false if we cannot scroll (locked)
    private boolean mScrollable = true;

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

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

    public LockableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setScrollingEnabled(boolean enabled) {
        mScrollable = enabled;
    }

    public boolean isScrollable() {
        return mScrollable;
    }

    @SuppressLint("ClickableViewAccessibility")
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {// if we can scroll pass the event to the superclass
            return mScrollable && super.onTouchEvent(ev);
        }
        return super.onTouchEvent(ev);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Don't do anything with intercepted touch events if
        // we are not scrollable
        return mScrollable && super.onInterceptTouchEvent(ev);
    }
}

当您SeekBar通过调用触摸 时,您可以暂时停止滚动myScrollView.setScrollingEnabled(false);并在您将手指从Seekbar以下位置抬起时启用它

seekBar.setOnTouchListener(new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN)
            myScrollView.setScrollingEnabled(false);
        else if (event.getAction() == MotionEvent.ACTION_UP)
            myScrollView.setScrollingEnabled(true);
        return false;
    }
});

参考资料LocableScrollView


推荐阅读