java - Android中的自定义SeekBar,仅在开始时触摸时允许前进

标签 java android xml seekbar

除非用户在 progress(10) 以下开始,否则我试图停止搜索栏的进度,这确保用户实际上必须滑动它,从而避免意外激活。到目前为止我已经尝试过了,看起来它可以工作,但是滑动条仍然可以从任何地方移动(进度(0)到进度(100)。

sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
        private Boolean isInRange = true;

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {

            if (seekBar.getProgress() > 95) {
                ((MainActivity)getActivity()).currentOrder = null;
                ((MainActivity)getActivity()).showMain();

            } else {
                seekBar.setProgress(0);
                isInRange = false;
            }

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            if (seekBar.getProgress() < 10) {
                isInRange = true;
            } else {
                seekBar.setProgress(0);
                isInRange = false;
            }
        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if(!isInRange) {
                seekBar.setProgress(0);
            }
        }

    });// Set on seek bar change listener

以防万一您需要它,这里是 seekbars 容器的 XML 代码:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorFocus"
    android:layout_alignParentBottom="true"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/seperator_bottom"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/darker_gray"
        android:orientation="horizontal" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_delivery_disabled"
        android:padding="16dp"
        android:layout_margin="16dp">

        <SeekBar
            android:id="@+id/seek"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:max="100"
            android:progressDrawable="@android:color/transparent"
            android:thumb="@mipmap/ic_slide" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/delivered"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:gravity="center"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentStart="true"
            android:id="@+id/textView" />

    </RelativeLayout>

</LinearLayout>

最佳答案

setProgress 是绝对值,与您当前的进度无关。当触摸不在 SeekBar前 10% 内时,您实际上正在做的实际上是将进度重置为 0,而不是在进度的 10% 内是。当然,这是假设您无法提供 max 属性,在这种情况下,max 值设置为 100。

因此,您需要调整代码以读取当前值,然后将其与当前值进行比较,看看是否在 10% 以内。我还建议跟踪起始位置和结束位置,而不是仅使用一个简单的 boolean 值来跟踪它。然后,您必须评估与当前位置相关的值(value)。

关于java - Android中的自定义SeekBar,仅在开始时触摸时允许前进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816211/

相关文章:

java - 如何?编写 Android 应用程序代码以将用户的位置设置更改为关闭?

java - 除了 ClientBundle 之外,还有其他在 GWT 中设置 CellTables 样式的方法吗?

android - 跨平台应用 Unity3D

xml - 以下 sibling 包含2个子元素时的XSL XPath帮助

java - 如何使用 Maven 程序集插件向类路径 MANIFEST 条目添加前缀?

java - 注入(inject) URL() Spring Autowired

java - Vertx ( vertx-Junit5 模块 ) 没有找到测试

android - 在适配器外更新 ListView 项

java - 首选项 Libgdx Java

xslt 中的 XML 命名空间处理