android中Gallery控件的自動滾動實現方式


方式1:
使用Timer和TimerTask類來完成圖片的自動定時滾動:
思路:循環調用Gallery類的onFling()方法。注意:一定要在子線程才管用。

     代碼:

	task = new TimerTask() {

			@Override
			public void run() {
				/**
				 * 參數1和2:手指在gallery上的動作
				 * 參數3和4:x方向和y方向的滾動的速度,-數表示向左滾,+數表示向右
				 */
				gallery.onFling(null, null, -750, 0);
			}
		};
		timer.schedule(task, 1000, 5000);
方式2:

使用Handler消息機制完成

思路:子線程內死循環使用handler每隔多長時間向主線程發送消息,通知gallery改變位置。

代碼:

子線程部分:

		new Thread(new Runnable() {
			int flag = 1;
			@Override
			public void run() {
				while (isalive) {
					//images爲裝圖片的集合
					if ((cur_index + 1) == images.size()) {
						flag = -1;
					} else if (cur_index == 0) {
						flag = 1;
					}
					Message msg = handler.obtainMessage(MSG_UPDATE, cur_index,
							0);
					handler.sendMessage(msg);
					try {
						Thread.sleep(4000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					switch (flag) {
					case 1:
						cur_index++;
						break;
					case -1:
						cur_index--;
						break;
					}
				}
			}
}).start();

主線程部分:

	private Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			if (msg.what == MSG_UPDATE) {
				gallery.setSelection(msg.arg1);
			}
		}
	};


兩種方式的優缺點:

優點:

使用方式1來實現,效果和手指拖動的效果一樣,滾動速度可以自己調。

使用方式2來實現,可以使用繼承Gallery的子類,重寫onFling方法,返回false來實現手指拖動時圖片只滾動一張的效果。

缺點:

使用方式1來實現,當你用手指拖動,就會發現圖片滾動的太快了,不是一張一張的滾動的,沒法使用繼承Gallery的子類,重寫onFling方法,返回false來實現手  指拖動時圖片只滾動一張的效果。

使用方式2來實現,效果沒那麼好看,圖片說換就換了,沒緩衝,滾動速度沒法控制。


------不足之處請各位大俠指點。




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