文档章节

支持gif的图片预览控件

kymjs张涛
 kymjs张涛
发布于 2015/10/19 12:31
字数 805
阅读 181
收藏 5

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

先看效果图:
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/

© 著作权归作者所有

共有 人打赏支持
kymjs张涛

kymjs张涛

粉丝 507
博文 64
码字总数 80237
作品 4
普陀
Android工程师
jquery实现图片上传之前预览的方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <tit......

蜗牛奔跑
2015/07/23
0
0
jQuery图片上传前先在本地预览

/ 名称:图片上传本地预览插件 v1.1 作者:周祥 时间:2013年11月26日 介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari 插件网站:http://keleyi.com/keleyi/p...

hc_naa
2015/10/19
107
0
Uploadify 控件上传图片 + 预览

jquery的Uploadify控件上传图片和预览使用介绍。 在简单的servlet系统中和在SSH框架中,后台处理不同的,在三大框架中图片预览时费了不少力气,所以下面将两种情况都介绍一下。 1,前台代码 ...

glen_xu
2015/07/09
0
0
程序员必备软件之编辑预览于一身的 Typora

前言 作为程序员,相信对 语法并不陌生,平时知识的积累,博客的编写或者是工作的报告都或多或少会用到。 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文...

下位子
03/17
0
0
基于 MVP 模式的 Android 多媒体选择器--boxing

boxing 是 Bilibili 开源的基于 MVP 模式的 Android 多媒体选择器。 特性 支持多/单图片选择和预览,单图裁剪功能 支持gif 支持视频选择功能 提供图片压缩 支持自定义UI 预览图...

匿名
2017/02/06
157
0

没有更多内容

加载失败,请刷新页面

加载更多

xilinx资源

本系列教学视频由赛灵思高级战略应用工程师带领你:从零开始,一步步深入 掌握 HLS 以及 UltraFAST 设计方法,帮助您成为系统设计和算法加速的大拿! http://www.eetrend.com/topics/2018-0...

whoisliang
21分钟前
0
0
=====BJmeter性能测试小接=====

一、性能测试分类 1、负载测试: 通过逐步加压的方法,达到既定的性能阈值的目标,阈值的设定应是小于某个值,如cpu使用率小于等于80% 2、压力测试: 通过逐步加压的方法,使得系统的某些资源...

覃光林
24分钟前
1
0
企业级开源四层负载均衡解决方案--LVS

网盘链接 企业级开源四层负载均衡解决方案--LVS 本课程将在Linux环境下,学习配置使用LVS,对Web集群和MySQL集群进行负载均衡,并结合利用Keepalived实现负载均衡器的高可用,实现对后端Rea...

qq__2304636824
30分钟前
2
0
Windows上安装Spacemacs

emacs安装 下载地址emacs 安装比较简单,解压后执行\bin\addpm.exe即可 emacs配置 emacs的默认配置文件路径和.emacs.d文件夹都是在Windows主目录下的 C:\Users\Administrator\AppData\Roami...

yxmsw2007
46分钟前
0
0
OSChina 周一乱弹 —— 鱼生不值得

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念:分享新裤子的单曲《没有理想的人不伤心 (Remix版)》: 《没有理想的人不伤心 (Remix版)》- 新裤子 手机党少年们想听歌,请使劲儿戳...

小小编辑
今天
215
9

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部