Glide加载GIF

拼搏飞 2016-08-31 11:02:56
glide加载gif时,怎么监听gif动画播放完成?
我想要在播放gif动画完成后 添加一些事件
...全文
463 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveWyf_ 2016-08-31
  • 打赏
  • 举报
回复
http://www.jianshu.com/p/0705b74e87a9 你看一下是否可以实现
Lshare 2016-08-31
  • 打赏
  • 举报
回复
使用最少的框架写了个Demo, 希望能帮到你。如果使用事件总线框架的话,代码会更优雅些~
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.gif_btn)
    Button gifBtn;
    @BindView(R.id.gif_image)
    ImageView gifImage;
    private String gifUrl = "http://www.vaikan" +
            ".com/wordpress/wp-content/uploads/2014/math-gifs/UM4iYce.gif";
    private int duration = 0;
    private Handler handler;
    private static final int WHAT_GIF_FINISH = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        handler = new Handler(getMainLooper()) {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case WHAT_GIF_FINISH:
                        showToast("动画结束");
                        break;
                }
            }
        };
    }

    @OnClick({R.id.gif_btn, R.id.gif_image})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.gif_btn:
                Glide.with(MainActivity.this)
                        .load(gifUrl)
//                        .asGif()
                        .listener(new RequestListener<String, GlideDrawable>() {
                            @Override
                            public boolean onException(Exception e, String model,
                                                       Target<GlideDrawable> target, boolean
                                                               isFirstResource) {
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(GlideDrawable resource, String model,
                                                           Target<GlideDrawable> target, boolean
                                                                   isFromMemoryCache, boolean
                                                                   isFirstResource) {
                                //计算动画时长
                                GifDrawable drawable = (GifDrawable) resource;
                                GifDecoder decoder = drawable.getDecoder();
                                for (int i = 0; i < drawable.getFrameCount(); i++) {
                                    duration += decoder.getDelay(i);
                                }
                                //发送延时消息,通知动画结束
                                handler.sendEmptyMessageDelayed(WHAT_GIF_FINISH, duration);
                                return false;
                            }
                        })
                        //仅仅加载一次gif动画
                        .into(new GlideDrawableImageViewTarget(gifImage, 1));
                break;
            case R.id.gif_image:
                break;
        }
    }

    public void showToast(String str) {
        Toast.makeText(MainActivity.this, "" + str, Toast.LENGTH_SHORT).show();
    }
}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧