文档章节

android显示网络gif图片

penngo
 penngo
发布于 2015/07/21 17:28
字数 640
阅读 1371
收藏 12

这功能源自负责app中要加一个显示gif广告图功能。

android自带控件不支持gif图片,网上很多通过扩展ImageView或View来实现支持gif图片,但在android4.0后,需要关闭硬件加速功能才能使用,而且也容易出现内存溢出问题。


网上找了两个开源包来实现显示Gif图

android-gif-drawable 支持gif显示的view控件

项目地址:https://github.com/koral--/android-gif-drawable

(如果访问不了,可以此这里下载

用jni实现的,编译生成so库后直接xml定义view,据说性能比较好,也能比较好避免内存内存溢出问题。

在Android Studio项目添加使用:

build.gradle文件dependencies添加内容:

dependencies {

    compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.+' /* 添加gif控件库引用 */

}


xUtils 

项目地址:https://github.com/wyouflf/xUtils

包含了很多实用的android工具,这里主要用它下载文件


MainActivity.java

package com.penngo.gif;

import android.app.Activity;
import android.content.Context;
import android.os.Environment;
import android.os.Bundle;
import android.util.Log;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;

import java.io.File;

import pl.droidsonroids.gif.GifDrawable;
import pl.droidsonroids.gif.GifImageView;

/**
 *
 * https://github.com/koral--/android-gif-drawable
 * https://github.com/wyouflf/xUtils
 */
public class MainActivity extends Activity {
    private final String tag = "MainActivity-->";
    private GifImageView gif1;
    private GifImageView gif2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gif1 = (GifImageView)this.findViewById(R.id.info_gif1);
        gif2 = (GifImageView)this.findViewById(R.id.info_gif2);
        initGif();
    }

    private void initGif(){
        String url1 = "http://img5.imgtn.bdimg.com/it/u=3026352344,1511311477&fm=21&gp=0.jpg";
        String url2 = "http://img5.imgtn.bdimg.com/it/u=808161139,2623525132&fm=21&gp=0.jpg";
        File saveImgPath = this.getImageDir(this);
        File gifSavePath1 = new File(saveImgPath, "gif1");
        File gifSavePath2 = new File(saveImgPath, "gif2");

        displayImage(url1, gifSavePath1, gif1);
        displayImage(url2, gifSavePath2, gif2);
    }

    public void displayImage(String url, File saveFile, final GifImageView gifView){
        HttpUtils http = new HttpUtils();
        // 下载图片
        http.download(url, saveFile.getAbsolutePath(), new RequestCallBack<File>() {
            public void onSuccess(ResponseInfo<File> responseInfo) {
                try {
                    Log.e(tag, "onSuccess========" + responseInfo.result.getAbsolutePath());
                    GifDrawable gifFrom = new GifDrawable( responseInfo.result.getAbsolutePath() );
                    gifView.setImageDrawable(gifFrom);
                }
                catch(Exception e){
                    Log.e(tag, e.getMessage());
                }
            }
            public void onFailure(HttpException error, String msg) {
                Log.e(tag, "onFailure========" + msg);
            }
        });
    }

    public File getFilesDir(Context context, String tag){
        if(isSdCardExist() == true){
            return context.getExternalFilesDir(tag);
        }
        else{
            return context.getFilesDir();
        }
    }

    public File getImageDir(Context context){
        File file = getFilesDir(context, "images");
        return file;
    }

    public boolean isSdCardExist() {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            return true;
        }
        return false;
    }
}


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView android:text="@string/label_info"
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <!-- gif控件 -->
    <pl.droidsonroids.gif.GifImageView
        android:id="@+id/info_gif1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:layout_below="@+id/info"
        />

    <pl.droidsonroids.gif.GifImageView
        android:id="@+id/info_gif2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:layout_below="@+id/info_gif1"
        />
</RelativeLayout>

运行效果:

下载


© 著作权归作者所有

共有 人打赏支持
penngo
粉丝 76
博文 98
码字总数 55112
作品 2
广州
程序员
加载中

评论(2)

penngo
penngo

引用来自“zhoutonghan”的评论

android studio怎么配置的,忘指点
build.gradle文件dependencies添加内容:compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.+' /* 添加gif控件库引用 */
z
zhoutonghan
android studio怎么配置的,忘指点
(android开源库android-gif-drawable)第二篇 加载网络gif图片

大家好, 今天给大家带来如何使用 android开源库android-gif-drawable来 加载网络gif图片 同样的DEMO下载地址在 最后 请大家去下载 。 如果gif图片地址无效 了。 请大家自行到网上去寻找一个...

乱取名字
2014/11/15
0
5
Android 开源框架Glide的使用

是一个快速高效的多媒体管理和图像加载的框架,封装了平台的多媒体的解码,内存和硬盘缓存等,支持解码、显示视频、图像和GIFs,Glide是基于定制的下面是关于Glide的配置和使用。 Glide的配置...

记录自己的点点滴滴
08/06
0
0
Material过渡+Glide显示问题踩坑

大家好,我系苍王。 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。 [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 这里说的坑的情况是使用...

CangWang
07/12
0
0
Android PowerImageView实现,可以播放动画的强大ImageView

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100315 我个人是比较喜欢逛贴吧的,贴吧里总是会有很多搞笑的动态图片,经常看一看就会感觉欢乐很多,可以释放掉不少平...

军歌
2014/02/19
0
0
(android开源库android-gif-drawable)第一篇 eclipse使用这个开源库

如果想显示gif图片 推荐使用Glide开源库 android-gif-drawable我就不推荐了 android开源库android-gif-drawable的使用 android的开源库是用来在android上显示gif图片的。我在网上查了一下,大...

乱取名字
2014/07/08
0
31

没有更多内容

加载失败,请刷新页面

加载更多

下一页

python3.6 取整除法

python3.6 中取整除法运算逻辑如下: d 非零,那么商 q 满足这样的关系: a = qd + r ,且0 ≤ r n1=7//3#7 = 3*2 +1n2=-6.1//3#-7 = 3*(-3)+2'{},{}'.format(n1,n2) 从运行结果可以...

colinux
26分钟前
3
0
阶段总结——用虚拟机搭建一个高可用负载均衡集群架构

[toc] linux基本知识已经介绍完,现有一个业务需要操作,通过对这个项目的操作,可以复习、总结、巩固之前的知识点; ** 用13台虚拟机搭建一个高可用负载均衡集群架构出来,并运行三个站点,...

feng-01
29分钟前
0
0
mysql 设置utf8字符集 (CentOS)

1.查看数据库及mysql应用目前使用的编码方式 (1)链接mysql 客户端 (2)执行:status 结果: 2.修改mysql 应用的字符编码(server characterset ) (1)打开配置文件:vim /etc/mysql/my...

qimh
30分钟前
0
0
windows无法格式化u盘解决方法

1。点开始-运行-输入cmd-format f: /fs: fat32 (这里f:是指U盘所在盘符) 这个格式化会很慢 请耐心等待

大灰狼wow
41分钟前
0
0
MySql 8.0连接失败

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_s...

放飞E梦想O
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部