80,351
社区成员
发帖
与我相关
我的任务
分享
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();
}
}