首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Android中显示gif的最佳实践

在Android中显示gif的最佳实践
EN

Stack Overflow用户
提问于 2015-05-19 16:22:21
回答 2查看 7.5K关注 0票数 1

我试图加载一个gifs列表并在listview上显示它们。目前,我将每个gif显示在一个and视图中,但是它非常慢,而且看起来很难看。我今天做了一些研究,但什么也帮不了我。

你们有什么好主意吗?顺便说一句,我从网址链接上得到了所有的礼物。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 18:24:22

我建议使用最近由Facebook发布的名为壁画https://github.com/facebook/fresco的开源库。根据我的经验,它可以很好地处理GIF,方法是在VM堆之外使用一些奇特的缓存方法,以避免GC对位图/图像的惊人影响。用户指南:_

下面只是实现到列表视图中的一个基本适配器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class FrescoGifAdapter extends BaseAdapter {


    ArrayList<String> urlList;
    private static LayoutInflater inflater=null;

    public FrescoGifAdapter(Activity activity, ArrayList<String> urlList) {

        if(urlList==null) {
            this.urlList = new ArrayList<>();
        }
        else {
            this.urlList = urlList;
        }
        inflater = (LayoutInflater)activity.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    public int getCount() {
        return urlList.size();
    }

    public String getItem(int position) {
        return urlList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {

        View vi = convertView;

        if(convertView==null){
            vi = inflater.inflate(R.layout.fresco_item, null);
            //Load Uri with URL.
            Uri uri = Uri.parse(getItem(position));

            SimpleDraweeView draweeView = (SimpleDraweeView) vi.findViewById(R.id.my_image_view);

            //Controller is required for controller the GIF animation, here I have just set it to autoplay as per the fresco guide.
            DraweeController controller = Fresco.newDraweeControllerBuilder()
                    .setUri(uri)
                    .setAutoPlayAnimations(true)
                    .build();
            //Set the DraweeView controller, and you should be good to go.
            draweeView.setController(controller);

        }

        return vi;
    }

}

fresco_item.xml (您可以更改尺寸以适应,我只是默认地引导维度)。请注意,缩放必须由壁画处理。事实上,他们建议不要设置任何定制的ImageView属性,因为它会破坏一些东西。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/my_image_view"
        android:layout_width="130dp"
        android:layout_height="130dp"
        fresco:placeholderImage="@drawable/ic_launcher"
        />


</LinearLayout>

然后在你的onCreate中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Required by Fresco to be initalized before setContentView.
        Fresco.initialize(this);
        setContentView(R.layout.activity_main);
        ListView lv = (ListView) findViewById(R.id.listview);
        ArrayList<String> urlList = new ArrayList<>();
        //Load neon cats
        for(int i = 0; i < 10; i++) {
            urlList.add("https://media3.giphy.com/media/JLQUx1mbgv2hO/200.gif");
        }

        lv.setAdapter(new FrescoGifAdapter(this, urlList));

    }
票数 3
EN

Stack Overflow用户

发布于 2017-05-15 00:45:13

用于在没有任何库的情况下加载gifimage的webview

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30338258

复制
相关文章
Android如何显示gif动图:AnimatedImageDrawable
我们知道,Android的基础组件ImageView本身是不支持gif动图的,所以很长一段时间内,开发者们都是通过三方库或自定义组件来实现gif显示,而且大部分的图片加载框架都支持gif,比如Glide。
BennuCTech
2022/04/12
5.2K0
Android如何显示gif动图:AnimatedImageDrawable
React Server Component 在 Shopify 中的最佳实践
Shopify 是国外的一个允许客户自由搭建商城的 nocode 产品,工程师 Cathryn Griffiths 分享了他在 Shopify 中实用 React Server Component 的最佳实践。
ssh_晨曦时梦见兮
2022/03/07
2.4K0
React Server Component 在 Shopify 中的最佳实践
在Android中显示APNG动图
APNG(Animated Portable Network Graphics)是一个基于PNG(Portable Network Graphics)的位图动画格式,用途类似GIF,其诞生的目的是为了替代老旧的 GIF 格式。
Clayman Twinkle
2019/04/04
17.1K1
在Android中显示APNG动图
Android-活动的最佳实践
知晓当前在哪一个活动 工作当中可能接手一份别人的代码,当需要在某个界面修改东西的时候,却找不到这个界面对应的是哪个活动。 新建一个BaseActivity类,右击包名,New,Java Class,输入BaseActivity。 只写一个普通Java类就可以了,并让BaseActivity继承AppCompatActivity,并重写onCreate()方法。
博博1998
2022/04/25
5860
Android-活动的最佳实践
编写 Android Library 的最佳实践
一直以来,技术圈里面只要涉及 Android Library 的文章,几乎都在讲如何发布到 Maven/Jcenter,却很少见到有文章来指导大家如何编写一个规范又好用的 Android Library。
Android技术干货分享
2019/04/18
1.2K0
编写 Android Library 的最佳实践
【译】LiveData-Flow在MVVM中的最佳实践
原文链接:https://proandroiddev.com/using-livedata-flow-in-mvvm-part-i-a98fe06077a0
用户1907613
2021/10/19
2.8K0
【译】LiveData-Flow在MVVM中的最佳实践
Java设计模式在Android中的实践
里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。需要注意以下几点:
xuexiangjys
2022/04/18
8610
Java设计模式在Android中的实践
2014-10-31Android学习------在小窗口Dialog中实现GIF动画--------GIF动画实现
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个GIF动画完美实现 源码 百度搜就知道很多下载的地方 我写的东西有可能比较乱,如果单一的篇章没看明白,请看上一篇文章
wust小吴
2022/03/07
6620
2014-10-31Android学习------在小窗口Dialog中实现GIF动画--------GIF动画实现
android-活动最佳实践
创建一个BaseActivity 类继承Activity 在onCreate 中输出类名
tea9
2022/07/16
2350
Android 性能优化最佳实践
快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们 App 现在是否是款性能良好的 APP,如果有一项不达标,那么说明我们的应用有待优化。
李林LiLin
2020/11/22
1.4K0
Android M 权限最佳实践
前言 Google在Android 6.0 上开始原生支持应用权限管理,再不是安装应用时的一刀切。权限管理虽然很大程度上增加了用户的可操作性,但是却苦了广大Android开发者。由于权限管理涉及到应用
非著名程序员
2018/02/02
1.3K0
Android M 权限最佳实践
Redis 在 SNS 类应用中的最佳实践有哪些?
2. 热点数据的实时缓存(比如feed,数据库、缓存同时写)
MonroeCode
2018/01/10
1.3K0
Spring Batch在大型企业中的最佳实践|洞见
在大型企业中,由于业务复杂、数据量大、数据格式不同、数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理。而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理。这样的过程就是“批处理”。
ThoughtWorks
2018/04/17
2.9K0
Spring Batch在大型企业中的最佳实践|洞见
Android 存储空间的最佳实践
为了提高文件的规整程度并让用户可以更好地控制他们的文件,Android 10 为应用引入了名为 "分区存储" 的新范式。分区存储改变了应用在外置存储中保存和访问文件的方式,为了帮您迁移应用并支持分区存储,我们概括了常见用例的最佳实践并分享给大家。
Android 开发者
2022/09/23
1.7K0
Android 存储空间的最佳实践
Jenkins 在 Kubernetes 上的最佳实践
Jenkins 是由 Java 编写的编排引擎,在 Full GC 时会 Stop The World(STW)。在大规模构建时,STW 可能会导致 Jenkins 无法处理新的请求。
陈少文
2021/06/05
1.1K0
集成测试在软件开发中的应用和最佳实践
集成测试也叫组装测试,联合测试。是单元测试的逻辑扩展,是软件测试的重要环节,它用于验证不同模块或组件之间的交互。本文将以集成测试为主题,分析其在软件开发过程中的作用,分享一些实践原则,以及一个具体的案例,帮助大家理解并有效运用集成测试。
运维开发王义杰
2023/08/10
7150
集成测试在软件开发中的应用和最佳实践
React Native在Android平台运行gif的解决方法
概述 目前RN在Android平台上不支持gif格式的图片,而在ios平台是支持的,期待以后的版本中系统也是可以默认支持Android的。首先说下在ios平台怎么加载gif呢? <Image source= {require('./img/loading.gif')} style = {styles.loading}/> 完整实例: xport default class Loading extends React.Component { render(){ if (!
xiangzhihong
2018/01/26
1.4K0
点击加载更多

相似问题

android -在活动中显示数据的最佳存储实践

14

在android中显示gif

22

在android中显示gif

689

在android上显示嵌套列表的最佳实践

14

android :在android中显示gif图片

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文