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