上一篇我们讲到了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中处理信息了。