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

Java Android中的自定义SeekBar,仅在开始时触摸时允许前进,java,android,xml,seekbar,Java,Android,Xml,Seekbar,我试图停止搜索栏的进度,除非用户开始低于进度(10),这确保用户实际上必须滑动它,从而避免意外激活。到目前为止,我已经尝试过了,它看起来可以工作,但是滑动条仍然可以从任何位置(进度(0)移动到进度(100) sb.setonseekbarchaneglistener(新SeekBar.onseekbarchaneglistener(){ 私有布尔值isInRange=true; @凌驾 TopTrackingTouch(SeekBar SeekBar)上的公共无效{ 如果(参见kbar.getP

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

sb.setonseekbarchaneglistener(新SeekBar.onseekbarchaneglistener(){
私有布尔值isInRange=true;
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
如果(参见kbar.getProgress()>95){
((MainActivity)getActivity()).currentOrder=null;
((MainActivity)getActivity()).showMain();
}否则{
seekBar.setProgress(0);
isInRange=false;
}
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
if(参见kbar.getProgress()<10){
isInRange=真;
}否则{
seekBar.setProgress(0);
isInRange=false;
}
}
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
如果(!isInRange){
seekBar.setProgress(0);
}
}
});//在搜索栏上设置更改侦听器
为了以防万一,以下是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>


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


因此,您需要调整代码以读取当前值,然后将其与当前值进行比较,看看它是否在10%以内。我还建议跟踪起始位置和结束位置,而不是只使用一个简单的
布尔值来跟踪它。然后您必须根据当前位置计算值。

怎么办你的意思是“它可以工作,但是滑动条仍然可以从任何地方移动”。哪个部分工作,哪个部分不工作?基本上,只有当用户开始触摸进度下方的滑块时,滑动条才应该滑动(10)。此时该功能正常,但如果滑动手指,则滑块将移动到当前触摸的位置。我不希望它移动,除非它在设置的边界范围内(<10)启动这是有道理的,你知道我会得到什么属性作为相对值吗?@Zachary查看Android文档,我认为没有。你必须根据当前位置和maxValue来计算它
<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>