开源库地址:https://github.com/chrisbanes/PhotoView
PhotoView是一个用来帮助开发者轻松实现ImageView缩放的库。开发者可以轻易控制对图片的缩放旋等等操作。
PhotoView的使用极其简单,而且提供了两种方案。可以使用普通的ImageView,也可以使用该库中提供的ImageView(PhotoView)。
不忘初心,方得始终
开源库地址:https://github.com/chrisbanes/PhotoView
PhotoView是一个用来帮助开发者轻松实现ImageView缩放的库。开发者可以轻易控制对图片的缩放旋等等操作。
PhotoView的使用极其简单,而且提供了两种方案。可以使用普通的ImageView,也可以使用该库中提供的ImageView(PhotoView)。
Android-Universal-Image-Loader是一个强大而又灵活的用于加载、缓存、显示图片的Android库。它提供了大量的配置选项,使用起来非常方便。
Picasso,一个强大的图片下载与缓存库,出自Square公司。基本使用如下:1
2
3Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);
也可以进行全局配置(只能配置一次)。1
2
3
4
5
6
7
8
9
10
11Picasso picasso=new Picasso.Builder(this)
.addRequestHandler()//自定义请求处理,默认已支持Drawable,Content,File等等
.defaultBitmapConfig()//bitmap配置
.downloader()//下载器,可选okhttp或urlconnection,也可自定义
.executor()//线程池
.indicatorsEnabled()//提示器
.loggingEnabled()//日志
.memoryCache()//自定义内存缓存策略
.requestTransformer()//Request预处理
.listener()//下载失败监听
.build();
【Android插件化探索(一)类加载器DexClassLoader】
【Android插件化探索(二)资源加载】
在上一篇中有一个细节没有提到,那就是getResourcesForApplication和AssetManager的区别。
getResourcesForApplication(String packageName),很显然需要传入一个包名,换言之,这个插件必须已经被安装在系统内,然后才能通过包名来获取资源。你可能会想,不安装照样可以获取包名啊。的确,通过pm.getPackageArchiveInfo()
可以获取安装包信息。但是,这些包都是没有在PMS中注册的。如果仍然这样获取,会提示如下错误。1
android.content.pm.PackageManager$NameNotFoundException: com.maplejaw.hotplugin
在探索资源加载方式之前,我们先来看看上一篇中没细讲的东西。还没看过的建议先看上一篇Android插件化探索(一)类加载器DexClassLoader。
DexClassLoader的源码如下:1
2
3
4
5
6
7public class DexClassLoader extends BaseDexClassLoader {
//支持从任何地方的apk/jar/dex中读取
public DexClassLoader(String dexPath, String optimizedDirectory,
String libraryPath, ClassLoader parent) {
super(dexPath, new File(optimizedDirectory), libraryPath, parent);
}
}
本文部分内容参考自《Android内核剖析》
在Java环境中,有个概念叫做“类加载器”(ClassLoader),其作用是动态装载Class文件。标准的Java SDK中有一个ClassLoader类,借助它可以装载想要的Class文件,每个ClassLoader对象在初始化时必须指定Class文件的路径
没有使用过ClassLoader的读者可能会问:“在过去的程序开发中,当我们需要某个类时,只需使用import关键字包含该类就可以了,为什么还要类加载器呢?”简单的讲,import中所引用的类文件有两个特点: