android中Gallery控件的自动滚动实现方式

1 篇文章 0 订阅
1 篇文章 0 订阅

方式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来实现,效果没那么好看,图片说换就换了,没缓冲,滚动速度没法控制。


------不足之处请各位大侠指点。




                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值