Java Android中的自定义SeekBar,仅在开始时触摸时允许前进
我试图停止搜索栏的进度,除非用户开始低于进度(10),这确保用户实际上必须滑动它,从而避免意外激活。到目前为止,我已经尝试过了,它看起来可以工作,但是滑动条仍然可以从任何位置(进度(0)移动到进度(100)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
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>