2

Android入门第36天-以一个小动画说一下Android里的Handler的使用

 1 year ago
source link: https://blog.csdn.net/lifetragedy/article/details/128028900
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Android入门第36天-以一个小动画说一下Android里的Handler的使用

我们在前面的Android教程中已经提到过这么一件事:Android在启动后会有一个主线程。它不允许任何子线程去改变主UI线程里的内容。

这么做是为了妨止,万一有一个带有大事务的线程导致了渲染组件时间过长最终导致Android UI出现“闪退”、“崩溃”的保护机制。

而实际我们在Android操作里的确是会有一些“耗时”的事情而采用异步线程,如:首页打开时调用第三方地图定位API、调用第三方银行API来显示你的余额、调用第三方社保显示你的当前社保缴纳费用和额度。

这种加载我们都会使用异步,一旦异步加载完后拿到结果再“刷新”在我们的主界面的控件里。那么此时由于Android的保护机制就不可以直接在异步线程里一个set()就完事了。

因此Android给我们提供了Handler机制

Handler我们可以认为它是一个和Android主进程间的通道。

当异步任务、子任务等需要改变主UI线程里的控件的渲染、值、显示用变化,那么我们就通过Handler发一条消息。

当主线程Listener到了消息,然后就可以去做相应的值的改变和渲染了。

d511198c0e0a4634bb4a72ad2d80d122.png

我们为了充分说明这个问题我们用一个ImageView,然后在里面每隔X毫秒,换一个图片从而实现下面这样的一个“动画”效果来说明Android里的Handler的使用方法。

ee1dcbaac90f4ce992c2e2508d49ab2d.gif

 

510fc2b06b7a4b12877aab09df27a047.png

项目结构很简单,只有8个图,这8个图是8个桢。每X毫秒在原来的图位置上换一个图,然后滚播,以到达“动画”效果。

我把这8桢图给出,供各位自己去练习吧。

64147ebc21c544f8bd3c21aa064323cd.png


newCodeMoreWhite.png


newCodeMoreWhite.png
  1. 我们使用的是ImageView里的setImageResource来轮换图片做到动画效果;
  2. 我们使用了Handler,在Handler.handleMessage里来换ImageView里的图;
  3. 然后我们使用了一个Timer()的schedule线程,以每100毫秒向Handler发一个emptyMessage(101)这样的一个消息给到Handler的Listener,所以在handleMessage方法中如果what==101就“飞”。

最终就实现了这样的一个效果了

b9ccd36a8b3349a4a2e3b46b73e636bf.gif

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK