Github: https://github.com/koral--/android-gif-drawable
官网上有它的一些详细介绍,使用方法也较简单。这里就不赘述了
不过如果是要加载网络上的gif图片,那么需要自行写一些代码才能实现的。
/**
* 加载图片
*/
public void loadImg(final String url) {
if (url != null) {
new Thread(){
@Override
public void run() {
super.run();
try {
HttpClient httpclient = new DefaultHttpClient();//apache httpclient
// 创建Get方法实例
HttpGet httpgets = new HttpGet(url);
HttpResponse response = null;
response = httpclient.execute(httpgets);
HttpEntity entity = response.getEntity();
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
if (entity != null) {
InputStream is = entity.getContent();
int len;
while ((len = is.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
}
bos.close();
if (BaseActivity.getInstance() != null && !BaseActivity.getInstance().isFinishing()) {
BaseActivity.getInstance().runOnUiThread(new Runnable() {
@Override
public void run() {
try {
mDrawable = new GifDrawable(bos.toByteArray());
setBackgroundDrawable(mDrawable);
mDrawable.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
核心代码即是:创建一个GifDrawable
当app中本身也有so库时,可能会报
java.lang.UnsatisfiedLinkError因为,该gif库会生成多个abi的目录。而我们项目本身的abi目录可能不全;进而导致在某些相应api机型上
适配时,在相应api目录下找不到除了gif-so文件之外的其它so文件,而报异常
在studio中,如果app/build/ 目录下,如果能找到相应的aar文件,那只需要用解压打开并删除多余abi目录;
再将该aar 放到项目的libs目录下;最后
dependencies {
compile(name:'android-gif-drawable', ext:'aar')
}
不知道是不是因为我这是mac系统的关系,反正我是没找到具体的aar文件,而是只看到了展开后的目录:
app/build/intermediates/exploded-aar/
在Android Studio中展开这个目录,能看到该gif库的目录;
将其中的so,我这里只取了armeabi目录的,移动到项目的jniLibs下;
将classes.jar重命名后,移动到项目的libs下;
将values.xml定义的copy到项目中;
将混淆规则写入到项目中的混淆文件里。
最后打包没有通过,只得在混淆中再加了一句 -ignorewarnings
终于打包过了