Android UI 利用Seekbar模擬Iphone滑塊解鎖

之前項目裏涉及到的,網上找實現方案沒找到。後來自己用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" />


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章