文档章节

支持gif的图片预览控件

爱看博客
 爱看博客
发布于 2015/10/22 10:02
字数 698
阅读 25
收藏 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
深圳
支持gif的图片预览控件

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

kymjs张涛
2015/10/19
171
0
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

没有更多内容

加载失败,请刷新页面

加载更多

React 服务器渲染原理解析与实践

网盘下载地址 React 服务器渲染原理解析与实践 本套课程,讲解了React中SSR技术的整个搭建思路及流程,完整的从原理上讲清楚了SSR的概念,重点在于讲解编写SSR框架遇到的各种知识点,以及细节...

qq__2304636824
24分钟前
0
0
sourcetree 离线免注册登录安装教程

Sourcetree是一个优秀的git可视化管理工具,深受开发者喜爱Sourcetree官网,但是在安装时需要谷歌账户登录,需要翻qiang才可以,此一点一直被人们所诟病。今天本教程就为大家提供离线免登陆安...

QQZZFT
53分钟前
1
0
使用 PostgreSQL 解决一个实际的统计分析问题

使用 PostgreSQL 解决一个实际的统计分析问题作者:老农民(刘启华)Email: 46715422@qq.com 之前有个朋友扔给我一个奇葩需求,他们公司之前做了一批问卷调查,全部都是统一格式的excel...

新疆老农民
56分钟前
7
0
TypeScript基础入门之高级类型的映射类型

转发 TypeScript基础入门之高级类型的映射类型 高级类型 映射类型 一个常见的任务是将一个已知的类型每个属性都变为可选的: interface PersonPartial {    name?: string;    age?...

durban
今天
1
0
Dubbo源码分析(6):Dubbo内核实现之基于SPI思想Dubbo内核实现

SPI接口定义 定义了@SPI注解 package com.alibaba.dubbo.common.extension; import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.an......

郑加威
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部