Android 使用Fresco库播放Gif一次

Android 使用Fresco库播放Gif一次,android,fresco,Android,Fresco,我正在使用下面的代码来播放gif,但在这里它不断重复播放gif Uri uri; DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(uri) .setAutoPlayAnimations(true) . // other setters .build(); mSimpleDraweeView.setController(controller); 我怎样才能播放一次呢

我正在使用下面的代码来播放gif,但在这里它不断重复播放gif

Uri uri;
DraweeController controller = Fresco.newDraweeControllerBuilder()
    .setUri(uri)
    .setAutoPlayAnimations(true)
    . // other setters
    .build();
mSimpleDraweeView.setController(controller);

我怎样才能播放一次呢?

你可以使用GIF的Glide。这是一个更好的库

Glide与毕加索非常相似,但比毕加索快得多。 Glide比毕加索消耗更少的内存

滑翔机有什么,毕加索没有 将GIF动画加载到简单的ImageView可能是Glide最有趣的功能。是的,你不能用毕加索做到这一点

一些重要链接-
1.
2.

您还可以使用Ion库加载gif。
请参阅此链接

it的梯度依赖性:-

dependencies {
    ...

    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.koushikdutta.ion:ion:2.+'
}
要从绘图窗口加载gif,请执行以下操作:-

ImageView imgView=(ImageView) view.findViewById(R.id.imageView);
Ion.with(imgView)
        .error(R.drawable.error_image)
        .animateGif(AnimateGifMode.ANIMATE)
        .load("android.resource://" + PackageName + "/" + R.drawable.loadingbh)
        .withBitmapInfo();
并从URL加载图像,如:-

Ion.with(imgView)
            .error(R.drawable.error_image)
            .animateGif(AnimateGifMode.ANIMATE)
            .load("https://www.beginnersheap.com/wp-content/uploads/2016/08/loading-BH.gif")  ///LOAD YOUR URL GIF
            .withBitmapInfo();

嗯,我并没有用湿壁画制作GIF文件,但这个可能对你们有帮助。使用下面的库加载GIF文件。

这是我的代码,它运行良好:

public class MainActivity extends AppCompatActivity {

private GifImageView mGigImageView;

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

     mGigImageView = (GifImageView) findViewById(R.id.mgif);

     GifDrawable gifDrawable = null;
     try {
          gifDrawable = new GifDrawable(getResources(), R.drawable.ani_1);
          gifDrawable.setLoopCount(1);
         } catch (IOException e) {
          e.printStackTrace();
          }
     mGigImageView.setImageDrawable(gifDrawable);
    }
}

我知道这是一个很晚的答复。然而,在搜索了几个小时后,我找不到正确的答案(我只想使用湿壁画,避免只为一个GIF添加另一个库)。这可以帮助像我这样的人寻找答案。我最终可以通过以下解决方法实现它

    ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
                @Override
                public void onFinalImageSet(
                        String id,
                        @Nullable ImageInfo imageInfo,
                        @Nullable final Animatable anim) {
                    if (anim != null) {
                        try {
//This is important to handle the loop. We are getting the field from class and //setting the loop count
                            Field field = AbstractAnimatedDrawable.class.getDeclaredField("mLoopCount");
                            field.setAccessible(true);
                            field.set(anim, 1);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        anim.start();
                    }
                }
            };

    DraweeController controller = Fresco.newDraweeControllerBuilder()
                    .setUri(uri).setAutoPlayAnimations(false).setControllerListener(controllerListener)
                    // other setters
                    .build();
    simpleImageView.setController(controller);
ControllerListener ControllerListener=new BaseControllerListener(){
@凌驾
最终图像集上的公共无效(
字符串id,
@可为空的ImageInfo ImageInfo,
@可为空的最终动画(动画){
如果(动画!=null){
试一试{
//这对于处理循环很重要。我们从类中获取字段并//设置循环计数
Field=AbstractAnimatedDrawable.class.getDeclaredField(“mLoopCount”);
字段。setAccessible(true);
字段集(动画,1);
}捕获(例外e){
e、 printStackTrace();
}
anim.start();
}
}
};
DraineController控制器=Fresco.newDraineControllerBuilder()
.setUri(uri).setAutoPlayAnimations(false).setControllerListener(controllerListener)
//其他二传手
.build();
simpleImageView.setController(控制器);
希望这有帮助。
谢谢。

我知道这一点。。。我不想增加我的apk尺寸。我想使用应用程序中现有的库如何使用glide播放gif一次?我已经在使用这个。。因为壁画支持gif,我可以摆脱这个libfresco不支持播放gif一次。非常棒的回答,谢谢。谢谢你是伟大的,在搜索2天后你的解决方案工作。非常感谢。@NaeemIbrahim:很高兴它帮助了您:)找不到AbstractAnimatedDrawable类。
    ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
                @Override
                public void onFinalImageSet(
                        String id,
                        @Nullable ImageInfo imageInfo,
                        @Nullable final Animatable anim) {
                    if (anim != null) {
                        try {
//This is important to handle the loop. We are getting the field from class and //setting the loop count
                            Field field = AbstractAnimatedDrawable.class.getDeclaredField("mLoopCount");
                            field.setAccessible(true);
                            field.set(anim, 1);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        anim.start();
                    }
                }
            };

    DraweeController controller = Fresco.newDraweeControllerBuilder()
                    .setUri(uri).setAutoPlayAnimations(false).setControllerListener(controllerListener)
                    // other setters
                    .build();
    simpleImageView.setController(controller);