之前項目裏涉及到的,網上找實現方案沒找到。後來自己用SeekBar模擬出來了。
原理很簡單。註冊SeekBarChangeListener,再回調函數裏控制滑塊的變化。當把滑塊移到0-70的範圍的時候,向下移動一個常量值,直到0。當在70-100範圍,向上移動一個常量值,直到100。
移動的代碼用兩個Runnable,在用Handler傳遞。
直接貼代碼:
public class SeekbarActivity extends Activity {
private SeekBar silder;
private Handler handler;
private final static int PROGRESS_CHANGE = 10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seekbar);
silder = (SeekBar) findViewById(R.id.seekbar);
handler = new Handler();
silder.setOnSeekBarChangeListener(sbChangeListener);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.seekbar, menu);
return true;
}
private SeekBar.OnSeekBarChangeListener sbChangeListener = new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
if (progress > 0 && progress < 70) {
handler.post(decreaseRunnable);
} else if (progress >= 70 && progress <= 100) {
handler.post(increaseRunnable);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
}
};
private Runnable decreaseRunnable = new Runnable() {
@Override
public void run() {
int progress = silder.getProgress();
progress -= PROGRESS_CHANGE;
if (progress <= 0)
progress = 0;
silder.setProgress(progress);
if (progress > 0 && progress < 70) {
handler.post(decreaseRunnable);
}
}
};
private Runnable increaseRunnable = new Runnable() {
@Override
public void run() {
int progress = silder.getProgress();
progress += PROGRESS_CHANGE;
if (progress > 100)
progress = 100;
silder.setProgress(progress);
if (progress >= 70 && progress < 100) {
handler.post(increaseRunnable);
} else if (progress == 100) {
Toast.makeText(SeekbarActivity.this, "Seekbar is 100%", Toast.LENGTH_LONG).show();
}
}
};
}
然後是Seekbar的xml。這個更簡單,貼貼圖片就可以了。
<SeekBar
android:id="@+id/seekbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/unlock_bg"
android:maxHeight="120dp"
android:minHeight="66dp"
android:thumb="@drawable/silder"
android:thumbOffset="0dip" />