2017-03-15 1 views
1

ユーザーが進捗状況(10)より下で開始しない限り、シークバーの進行を停止しようとしているため、活性化。しかし、スライドバーはまだ)(100を進行するためにどこにでも(進捗(0)アップから移動することができ、私はこれまでのところ、これを試してみたし、それが仕事だろうように見えます。AndroidのカスタムSeekBar、起動時にタッチしたときにのみ進行を許可する

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> 
+0

「それはうまくいくだろうが、スライドバーはどこからでも移動できる」とはどういう意味ですか?どの部分がうまくいったのですか? – bc004346

+0

基本的には、ユーザーが進捗状況(10)の下にあるスライダーに触れ始めると、スライドすることが想定されています。その瞬間に動作しますが、次に指をスライドさせると、スライダーがタッチが現在動いている場所に移動します。境界内で開始されない限り動かないようにしたい(<10) – Zachary

答えて

1

setProgressあなたの進歩は、現在あなたが実際には、本質的に0にいつでも進捗状況をリセットして行っている際にタッチされている場所への相対ではない絶対値が、あります。 最初の10%SeekBarで、10%以内ではありませんeは進歩です。もちろん、maxの値をmaxの値に設定した場合は、maxの属性を提供できないと仮定しています。

したがって、現在の値を読み取って現在の値と比較し、それが10%以内ならば。また、単純なbooleanの値を追跡するのではなく、開始位置と終了位置を追跡することをお勧めします。次に、現在の位置との関連で値を評価する必要があります。

+0

これは理にかなっています。 – Zachary

+0

@ Zachary Androidのドキュメントを見ると、私はそこに1つあるとは思わない。現在の位置とmaxValueに基づいて計算する必要があります – bc004346

関連する問題