方式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來實現,效果沒那麼好看,圖片說換就換了,沒緩衝,滾動速度沒法控制。
------不足之處請各位大俠指點。