Android学习第十一篇——handler结合ImageView使用Demo

上一篇我们讲到了hangler,最后的时候有点写不下去了,原因就是因为没学到家,因此这次结合实例继续学习。


这次我们要做的就是通过Handler+Thread作为一个计时器来控制图片的透明度,使得图片慢慢变透明直到看不见,效果只能这样描述一下了,不知道怎么上传视频,具体效果可以下载代码自己运行查看。Demo下载



布局就不看了,就一个ImageView,我们直接来看一下Activity

// 声明ImageView对象
	ImageView imageview;
	TextView textview;
	// ImageView的alpha值,
	int image_alpha = 255;

	Handler mHandler = new Handler();
	// 控件线程
	boolean isrung = false;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		isrung = true;

		// 获得ImageView的对象
		imageview = (ImageView) this.findViewById(R.id.ImageView01);
		textview = (TextView) this.findViewById(R.id.TextView01);

		// 设置imageview的图片资源。同样可以再xml布局中像下面这样写
		// android:src="@drawable/logo"
		imageview.setImageResource(R.drawable.logo);

		// 设置imageview的Alpha值
		imageview.setAlpha(image_alpha);

		// 开启一个线程来让Alpha值递减
		new Thread(new Runnable() {
			public void run() {
				while (isrung) {
					try {

						Thread.sleep(200);
						// 更新Alpha值
						updateAlpha();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}

			}
		}).start();

		// 接受消息之后更新imageview视图
		mHandler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				imageview.setAlpha(image_alpha);
				textview.setText("现在alpha值是:" + Integer.toString(image_alpha));
				// 更新
				imageview.invalidate();
			}
		};
	}

	public void updateAlpha() {
		if (image_alpha - 7 >= 0) {
			image_alpha -= 7;
		} else {
			image_alpha = 0;
			isrung = false;
		}
		// 发送需要更新imageview视图的消息
		mHandler.sendMessage(mHandler.obtainMessage());
	}

这里我们其实没有发送什么信息给mHandler

// 发送需要更新imageview视图的消息
mHandler.sendMessage(mHandler.obtainMessage());
这么做的目的纯粹就是为了触发handlerMessage 这个方法,然后去设置ImageView的透明度.



补充: mHandler.obtainMessage() 这个只是为了获得一个Message对象,别的没有东西了,至于你要传递的信息需要设置的。

比如:

Message msg = handler.obtainMessage();
		
msg.arg1 = 123;//传递整型数据
/*传递object类型
msg.ob使用来放对象的,这个对象可以使任何类型
*/
msg.obj = "asd";

设置好数据之后就是携带数据发送信息给handler

mHandler.sendMessage();
//或者
mHandler.sendToTarget()
//这里的target就是handler,sendToTarget()又在调用handler的 sendMessage 方法了。。。

最后就是到handlerMessage中处理信息了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值