如何在android的ImageView后台加载GIF

如何在android的ImageView后台加载GIF,android,Android,这是我从URL加载gif的代码。我正在使用Glide库。此代码无效,活动显示为空 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_background_gif); ImageView image

这是我从URL加载gif的代码。我正在使用Glide库。此代码无效,活动显示为空

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_background_gif);

            ImageView imageView = (ImageView) findViewById(R.id.gifImageView);

            //Glide.with(this).load(getResources().getDrawable(R.drawable.sample_img)).into(imageView);

            Glide.with(this)
                    .load("http://more-sky.com/data/out/6/IMG_105566.gif")
                    .into(new GlideDrawableImageViewTarget(imageView));

        }
试试这个

 Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);

Android不支持GIF。作为一种解决方法,Android提供了动画列表/动画绘图功能。您需要将GIF转换为单个帧[.png文件]。您可以使用GIMP进行转换

原始GIF图像

此GIF可以分解为以下帧:

-背景100毫秒
-帧2 100ms
-帧3 100ms
.
.
.
依此类推

GIMP中的GIF帧

将它们另存为frame01.png、frame02.png等,并创建一个动画列表XML文件,例如progress\u animation.XML

<animation-list android:id="@+id/selected" android:oneshot="false">
<item android:drawable="@drawable/frame01" android:duration="50" />
<item android:drawable="@drawable/frame02" android:duration="50" />
<item android:drawable="@drawable/frame03" android:duration="50" />
....
<item android:drawable="@drawable/frameN" android:duration="50" />

你可以通过编程实现它, 点击这个链接

或者使用图书馆


您可以使用WebView加载GIF图像。实现非常简单,工作起来很有魅力。创建html页面。代码如下:

<html style="margin: 0;">
<body style="margin: 0;">
<img src="imagename.gif" style="width: 100%; height: 100%" />
</body>
</html>

你也可以用毕加索

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)

从p OS开始,gif现在直接受Android支持,并且很容易加载。
Java代码(从文件加载):

Kotlin代码(从资产加载):


您有Internet权限吗?请查看链接
webView = (WebView)findViewById(R.id.webView);
webView.setBackgroundColor(Color.TRANSPARENT); //for gif without background
webView.loadUrl("file:///android_asset/html/HTML_PAGE_NAME.html");
Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)
ImageDecoder.Source source = ImageDecoder.createSource(new File(fileName));
AnimatedImageDrawable drawable = (AnimatedImageDrawable) ImageDecoder.decodeDrawable(source);
imageView.setImageDrawable(drawable);
drawable.start();
val source = ImageDecoder.createSource(assets, assetFileName)
val drawable = ImageDecoder.decodeDrawable(source)

imageView.setImageDrawable(drawable)
if (drawable is AnimatedImageDrawable) {
  drawable.start()
}