当前位置:  开发笔记 > 编程语言 > 正文

显示动画GIF

如何解决《显示动画GIF》经验,为你挑选了12个好方法。

我想在我的应用程序中显示动画GIF图像.正如我发现的那样,Android本身并不支持动画GIF.

但是它可以使用AnimationDrawable显示动画:

开发>指南>图像和图形> Drawables概述

该示例使用在应用程序资源中保存为帧的动画,但我需要的是直接显示动画gif.

我的计划是将动画GIF分解为帧并将每个帧添加为可绘制到AnimationDrawable.

有谁知道如何从动画GIF中提取帧并将它们转换为Drawable?



1> Pointer Null..:

Android实际上可以使用android.graphics.Movie类解码和显示动画GIF.

这没有太多文档记录,但在SDK参考中.此外,它在BitmapDecode示例中的ApiDemos中的示例中使用,带有一些动画标志.


@Bicou在后HC设备上你应该在你的View上设置`setLayerType(LAYER_TYPE_SOFTWARE)`.但它仍然只适用于某些GIF和某些设备.
这有多稳定?我已经在我的应用程序中实现了它,在我的冰淇淋三明治设备上它根本不工作,在2.3模拟器上它正在工作但是一些GIF帧是错误的(错误的颜色).在电脑上它当然工作正常.是什么赋予了?
@MichałK谢谢!`Paint p = new Paint(); p.setAntiAlias(真); setLayerType(LAYER_TYPE_SOFTWARE,p);`工作了!
电影课是故意无证的 - 它很弱而且不受支持.如果你需要适当的Gif动画,你最好自己实现它.我使用NDK为我的应用做了这个.

2> itzhar..:

更新:

使用滑行:

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.0.0'
}

用法:

Glide.with(context).load(GIF_URI).into(new GlideDrawableImageViewTarget(IMAGE_VIEW));

看文档



3> Alex Zaraos..:

也把(main/assets/htmls/name.gif)[用这个html调整到大小]






在你的Xml中声明例如这样(main/res/layout/name.xml):[你定义大小,例如]


在您的Activity中将下一个代码放在onCreate中

web = (WebView) findViewById(R.id.webView); 
web.setBackgroundColor(Color.TRANSPARENT); //for gif without background
web.loadUrl("file:///android_asset/htmls/name.html");

如果要动态加载,则必须使用数据加载webview:

// or "[path]/name.gif" (e.g: file:///android_asset/name.gif for resources in asset folder), and in loadDataWithBaseURL(), you don't need to set base URL, on the other hand, it's similar to loadData() method.
String gifName = "name.gif";
String yourData = "\n" +
        "    \n" +
        "    \n" +
        "    \n" +
        "    ";
// Important to add this attribute to webView to get resource from outside.
webView.getSettings().setAllowFileAccess(true);

// Notice: should use loadDataWithBaseURL. BaseUrl could be the base url such as the path to asset folder, or SDCard or any other path, where your images or the other media resides related to your html
webView.loadDataWithBaseURL("file:///android_asset/", yourData, "text/html", "utf-8", null);
// Or if you want to load image from SD card or where else, here is the idea.
String base = Environment.getExternalStorageDirectory().getAbsolutePath().toString();
webView.loadDataWithBaseURL(base + '/', yourData, "text/html", "utf-8", null);

建议:更好的加载带有静态图像的gif以获取更多信息请查看https://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html

就是这样,我希望你能提供帮助.


如果要从sdcard加载GIF?

4> Leonti..:

我通过将gif动画分割成帧然后将其保存到手机来解决了这个问题,所以我不必在Android中处理它.

然后我将每一帧下载到手机上,从中创建Drawable,然后创建AnimationDrawable - 非常类似于我的问题中的示例


这是处理动画的文档化方法.

5> Apperside..:

我找到了一个非常简单的方法,这里有一个简单的工作示例

显示动画小部件

在开始工作之前,在代码中有一些要做的事情

在下面的

    @Override
    public void onCreate(Bundle savedInstanceState){    
        super.onCreate(savedInstanceStated);   
        setContentView(new MYGIFView());
    }    
}

只是替换

setContentView(new MYGIFView());

setContentView(new MYGIFView(this));

和IN

public GIFView(Context context) {
    super(context);

提供您自己的gif动画文件

    is = context.getResources().openRawResource(R.drawable.earth);
    movie = Movie.decodeStream(is);
}

取代第一线

public MYGIFView(Context context) {

根据班级名称......

完成这些小改动之后它应该对我有用......

希望这个帮助


请随便清理这个答案.
您试过哪个Android版本?我尝试了Android 2.2和2.3但它返回Movie对象null.什么可能是错的?
答案有什么问题?我刚刚提供了一个链接和一些必要的修复工具

6> Nick Frolov..:

在Android上显示动画GIF的方法:

电影课.如上所述,它是相当错误的.

的WebView.它使用起来非常简单并且通常有效.但有时它会开始行为不端,而且它总是存在于你没有的一些模糊设备上.此外,您不能在任何类型的列表视图中使用多个实例,因为它会对您的内存起作用.不过,您可能会将其视为主要方法.

自定义代码将GIF解码为位图并将其显示为Drawable或ImageView.我会提到两个库:

https://github.com/koral--/android-gif-drawable - 解码器用C实现,所以它非常有效.

https://code.google.com/p/giffiledecoder - 解码器是用Java实现的,因此更容易使用.即使对于大文件,仍然相当有效.

您还可以找到许多基于GifDecoder类的库.这也是一个基于Java的解码器,但它的工作原理是将整个文件加载到内存中,因此它只适用于小文件.



7> Roozbeh Zabi..:

我很难让Android动画gif工作.我只跟着两个工作:

    的WebView

    离子

WebView工作正常,非常简单,但问题是它使视图加载速度变慢,应用程序在一秒左右没有响应.我不喜欢那样.所以我尝试了不同的方法(DID NOT WORK):

    ImageViewEx已弃用!

    毕加索没有加载GIF动画

    android-gif-drawable看起来很棒,但它在我的项目中引起了一些有线NDK问题.它导致我的本地NDK库停止工作,我无法修复它

我有一些来回的Ion; 最后,我有它工作,它真的很快:-)

Ion.with(imgView)
  .error(R.drawable.default_image)
  .animateGif(AnimateGifMode.ANIMATE)
  .load("file:///android_asset/animated.gif");



8> Shoeb Siddiq..:

Glide

适用于Android的Image Loader Library,由Google推荐.

Glide与毕加索非常相似,但这比毕加索要快得多.

Glide比Picasso消耗更少的内存.

格莱德有什么,但毕加索没有

将GIF动画加载到简单的ImageView的功能可能是Glide最有趣的功能.是的,你不能用毕加索做到这一点. 在此输入图像描述 一些重要的链接 -

    https://github.com/bumptech/glide

    http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en



9> NightSkyCode..:

使用ImageViewEx,一个使用gif的库就像使用一样简单ImageView.



10> nirav kalola..:

试试这个,下面是代码显示进度条中的gif文件

loading_activity.xml(在布局文件夹中)



    


custom_loading.xml(在drawable文件夹中)

在这里我把black_gif.gif(在drawable文件夹中),你可以把你自己的gif放在这里



LoadingActivity.java(在res文件夹中)

public class LoadingActivity extends Activity {

    ProgressBar bar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loading);
        bar = (ProgressBar) findViewById(R.id.progressBar);
        bar.setVisibility(View.VISIBLE);

    }

}



11> bapho..:

没人提到Ion或Glide库.他们工作得很好.

与WebView相比,它更容易处理.



12> Dr1Ku..:

我已经成功地使用了本文中提出的解决方案,这是一个名为的类GifMovieView,它可以呈现一个View可以显示或添加到特定的类ViewGroup.查看指定文章第2部分和第3部分中介绍的其他方法.

这种方法的唯一缺点是对电影的抗锯齿效果不是那么好(必须是使用"阴暗"Android Movie类的副作用).然后,最好在动画GIF中将背景设置为纯色.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有