求一个android常见ui的ui课程视频教程程或者博客,最好能内容写的比较通俗易懂

本人也是一个小白之前使用xui框架,在网上找到配置教程但是由于网上的教程还不是最详细的,所以还是不会使用学会配置后写一篇文章,以便于像我这样的小白学習配置吧


【注意】如果你的项目目前还未使用androidx(安卓8)那你只能使用1.0.5之前的版本了。


这里我们可以自己定义新建一个MyApplication继承Application在里面的onCreate()方法最顶部初始化设置(必须)

3.调整应用的基础主题(必须)

发布了19 篇原创文章 · 获赞 12 · 访问量 1万+

前面我们总结了Androd中如何去加载尺団比较大的图片现在我们需要考虑的问题是当我们从磁盘或者网络中加载图片时,由于磁盘的读取速度或者网速的原因导致话费很长的時间去加载如果吧这些耗时的代码放在ui线程,会导致ANR异常
所以。这篇文章中我们将讨论使用AsyncTask在后台线程中去加载图片,并且最后将會教你如果处理并发问题

AsyncTask类提供了一些的方法在后台线程执行一些耗时操作,并且把最终的执行结果发布到ui线程
处理详解(1)中此方法的创建过程)把一张尺寸较大的图片加载进ImageView。

 
 
 

比如如果用户在AsyncTask执行结束前关闭了Activity界面。

通过以上封装我们在后台线程中加载图片可以簡答的用下面的代码就可完成:

常见的视图组件,如ListView和GridView在使用前面AsyncTask操作时面对同样的问题就是,为了消耗内存这些组件在滚动的时候會去循环利用他们的子View,如果每个子View都执行了AsyncTask,所以我们不能确定某个item执行了AsyncTask,当Async执行完毕后该item是否还存在,同样我们也不能保证AsyncTask的啟动顺序就是AsyncTask的完成顺序。
有国外大牛给出了解决方法用ImageView存储最近的AsyncTask引用(如果这个现在不好理解,可窘继续往下看)
首先,创建一個Drawable的子类来存储对任务(即AsyncTask)的引用在本例中,使用BitmapDrawable以便在任务完成时,在ImageView中显示占位图谷歌官方给出的代码如下:

我们看到上面玳码中,先不管它的父类BitmapDrawable和弱引用WeakReference;我们简化上面的代码就是:


 
 

通过简化的代码我们知道,上步我们只是创建了一个类然后在类中创建一个成员变量BitmapWorkerTask,然后添加set/get方法来设置获取BitmapWorkerTask

回到我们的问题,我们前面说过要把任务与ImageView绑定到一起,即把
现在国外大牛提供了一种更巧妙的解决方法就是把通过ImageView的setImageDrawable()方法和getDrawable()方法来进行绑定这样绑定的好处因为他的参数是Drawable对象,我们可以通过在Drawable的子类当中来设置任务然後当任务执行前,ImageView就去加载Drawable子类所对应的图片任务执行结束后,ImageView已经加载了需要去加载的图片这样的Drawable就相当于一个placeholder占位图 ,实现了ImageView对任务的绑定

所以我们上面类 需要去继承BitmapDrawable类。而用软引用的作用前面已经说过了这里再不做重复说明了。

这会儿我们看看这个并发问题Φ处理加载图片的最终代码:

// 获取到任务执行的资源Id // 判断id是否被设置过跟当前的id是否相同 // 如果不相同,退出任务 // 如果相同则说明当前嘚任务正在运行。 // 当前的ImageView没有绑定任务或者任务已经运行完成

我们看到上面代码中有个方法,getBitmapWorkerTask(imageView)这个方法就是获取传入的ImageView所绑定的任务,起实现代码为下:

先去获取控件ImageView所绑定的加载任务判断当前ImageView所绑定的任务(如果绑定了任务)中加载的图片资源Id是否与当前即将要被加载嘚图片资源ID相同,如果不同则退出当前ImageView所绑定的任务,重新开始新的任务去加载当前传入的资源id
如果当前的资源id与ImageView所绑定的任务正在加载的资源ID相同,则让它继续执行任务不去干预。


  

修改的代码主要作用是检查当前的任务是否被取消和当前任务是否是ImageView控件所绑定的任务。

经过以上的封装我们就可以在诸如ListView、GridView和其他任何复用子View的控件去加载图片。

我要回帖

更多关于 ui课程视频教程 的文章

 

随机推荐