android - 如何在内部 SeekBar 上禁用 ScrollView 的工作?
问题描述
例如,当我移动 circleseekbar 滑块时,滚动视图也起作用,从而将整个布局向上移动,我只需要能够更改滑块的位置。
试过了android:scrollbars = "none"
- 一切都失败了。
解决方案
您需要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;
}
});
推荐阅读
- redux-saga - 如何将 Redux Saga 转换为 Observable
- python - 为什么这个 python 代码在函数中执行得更快?
- amazon-web-services - Hive 时间戳错误为二进制
- c++ - 为什么我需要在 QVector 中有一个默认构造函数
? - java - 在Java中,我如何检查一个字符串是否由字母和数字组成,但只有字母和数字?
- java - 如何模拟 Stripe 网络调用以在 Java 中进行测试
- html - 我选择什么 enctype 将选项值保留为对象并保留支持类型 app/json?
- reactjs - Material-ui 的 Switch 组件 onChange 处理程序未触发
- android - 启用 R8 会在 TextView 中使用 fontFamily 导致“android.view.InflateException Error inflating class TextView”
- c++ - opencv 中的 cv::imshow 仅显示合成图像的一部分,但单独显示部分有效。为什么?