如何在内部 SeekBar 上禁用 ScrollView 的工作?

How to disable work of ScrollView on inner SeekBar?

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

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

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

要实现这一点: 不要使用 ScrollView,而是使用下面自定义的一个,其中覆盖 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);
    }
}

您可以通过调用 myScrollView.setScrollingEnabled(false) 在触摸 SeekBar 时暂时停止滚动;当您将手指从 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;
    }
});

Reference of LocableScrollView