文档章节

支持gif的图片预览控件

爱看博客
 爱看博客
发布于 2015/10/22 10:02
字数 698
阅读 27
收藏 0

先看效果图:
KJGallery

gif图片加载

由于KJFrameForAndroid自带的网络图片加载并不支持gif的显示。所以我们需要自定义一个GifRequest类来作为我们的gif请求类。
首先来看一下主要代码

public class GifRequest extends Request<byte[]> {
    @Override
    public Response<byte[]> parseNetworkResponse(NetworkResponse response) {
        synchronized (sDecodeLock) {
            try {
                return doParse(response);
            } catch (OutOfMemoryError e) {
                KJLoger.debug("Caught OOM for %d byte image, url=%s",
                        response.data.length, getUrl());
                return Response.error(new KJHttpException(e));
            }
        }
    }

    private Response<byte[]> doParse(NetworkResponse response) {
        if (response.data == null) {
            return Response.error(new KJHttpException(response));
        } else {
            Response<byte[]> b = Response.success(response.data, response.headers,
                    HttpHeaderParser.parseCacheHeaders(mConfig, response));
            return b;
        }
    }

    @Override
    protected void deliverResponse(Map<String, String> header, byte[] response) {
        if (mCallback != null) {
            mCallback.onSuccess(response);
        }
    }
}

功能非常的简单,在doParse()方法中,我们通过判断response.data的内容来得知这次请求是否成功,当请求成功以后,就将这个请求得到的数据通过分发器deliverResponse方法分发到主线程的回调方法中响应。
完整的实现可以参照下文给出的demo源码。

gif图片显示

当图片加载到本地了以后,我们所需要做的就是将上面加载到的gif显示出来。Android的imageview本身是不支持gif显示的,当然,已经有前人帮我们实现了显示gif的功能。这里跟大家推荐两个gif显示的控件:1、使了用jni的gif显示控件; 2、最小体积的显示方式(只有2个类)
这两个类各自的优势就像前面说的,第一个使用了jni,会使apk增大但效率要比第二种使用java代码逐帧解析高很多;第二种自然就是从apk体积上要小了很多,毕竟仅仅2个类就解决了gif的显示。
这两种库的使用方式在下面的源码中我都会给出,大家可以自行选择。

顺便说一下在使用jni那个项目的时候遇到了一个问题,报java.lang.UnsatisfiedLinkError: Couldn't load pl_droidsonroids_gif from loader xxxx findLibrary returned null 就是so文件在项目编译后并没有打包到apk里面去(详细描述见Issue)
就这个问题困扰了我整整一天,最后发现竟然是因为百度推送的gradle声明中加入了下面的代码,查了很久原因才知道这段代码是为了兼容老版本的AndroidStudio,而新版本早就已经不再使用了,删掉就正常了。

task copyNativeLibs(type: Copy) {
    from fileTree(dir: 'libs', include: 'armeabi/*.so') into 'build/lib'
}

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniFolders = [new File(buildDir, 'lib')]
}

完整代码

有关gif显示的完整demo,我写成了一个module开源在GitHub上,大家可以在这里查看:https://github.com/kymjs/KJGallery
同时跟大家推荐一个移动开发网站:http://www.mobile-open.com/

版权声明:本文原创,转载请注明来自 http://kymjs.com/

本文转载自:http://blog.csdn.net/kymjs/article/details/49248645

共有 人打赏支持
爱看博客
粉丝 5
博文 103
码字总数 23887
作品 0
深圳
私信 提问
iOS手机客户端App处理附件的功能

在App客户端中,提供一个控件可以查看常见附件:文本、图片、office文件、多媒体附件、压缩文件等 Office文档查看如果客户端做不到可通过服务器端转为PDF提供给手机端 1)提供一个控件,通过...

飞舸益动
2017/04/03
0
0
Android手机客户端App处理附件的功能

在App客户端中,提供一个控件可以查看常见附件:文本、图片、office文件、多媒体附件、压缩文件等 Office文档查看如果客户端做不到可通过服务器端转为PDF提供给手机端 1)提供一个控件,通过...

飞舸益动
2017/04/03
0
0
Android手机客户端App处理附件的功能

在App客户端中,提供一个控件可以查看常见附件:文本、图片、office文件、多媒体附件、压缩文件等 Office文档查看如果客户端做不到可通过服务器端转为PDF提供给手机端 1)提供一个控件,通过...

飞舸益动
2017/04/03
1
0
支持gif的图片预览控件

最近实现了一个gif图片和普通图片浏览的功能,支持双击缩放,单机退出。同时可以选择使用jni的形式去高效加载gif或者更更精简的(仅2个类)gif控件 先看效果图: gif图片加载 由于KJFrameForA...

kymjs张涛
2015/10/19
171
0
iOS手机客户端App处理附件的功能

在App客户端中,提供一个控件可以查看常见附件:文本、图片、office文件、多媒体附件、压缩文件等 Office文档查看如果客户端做不到可通过服务器端转为PDF提供给手机端 1)提供一个控件,通过...

飞舸益动
2017/04/03
1
0

没有更多内容

加载失败,请刷新页面

加载更多

更换本地git仓库的远程地址

参考学习链接:https://blog.csdn.net/mlq8087/article/details/81360025 本地 Git 仓库根目录下:cd .git ; 编辑 Git 配置文件:vim config ; shift + i 进入input 编辑模式 ; 修改 [rem...

Liens
8分钟前
0
0
Install hadoop, install hive, 及hive的使用

hadoop , hive 安装过程和配置文件(附件)。 注意: hadoop Name Node未做ha. Hive, 还是基本的hive on MR, 未使用on tez, on spark, 未配置LLAP、 HCatalog and WebHCat。 安装完之后,以...

墨子Zhai
9分钟前
0
0
如何处理缓存失效、缓存穿透、缓存并发等问题

缓存失效:   引起这个原因的主要因素是高并发下,我们一般设定一个缓存的过期时间时,可能有一些会设置5分钟啊,10分钟这些;并发很高时可能会出在某一个时间同时生成了很多的缓存,并且过...

我心中有猛狗
11分钟前
1
0
对于java 参数是值传递还是引用传递的

代码: package com.qimh.anotation;public class Test { static class Person{ private String name; public String getName() { return name;......

qimh
19分钟前
0
0
Pages Manager——可本地管理Pages服务内容,一键生成漂亮的文档界面。

Pages Manager Git地址 可本地管理Pages服务内容,一键生成漂亮的文档界面。在线预览 简单、轻便,无需安装数据库。 框架:spring-boot 数据库:sqlite 原理 本地维护一组markdown文档 将mar...

tanghc
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部