使用Glide,轻松实现通过网络链接加载GIF图片
本人喜欢直接上源码
下面是XML布局public class MainActivity extends AppCompatActivity { public static final int MESSAGE_SUCCESS = 0x112; private ImageView gifImageView; private ImageView btn; private ProgressDialog progressDialog; private String url; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MESSAGE_SUCCESS: gifImageView.setVisibility(View.GONE); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn = (ImageView) findViewById(R.id.iv_btn); gifImageView = (ImageView) findViewById(R.id.gif_image); gifImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { gifImageView.setVisibility(View.GONE); } }); progressDialog = new ProgressDialog(this); url = "https://ss3.baidu.com/-fo3dSag_xI4khGko9WTAnF6hhy/image/h%3D200/sign=bf7ead2a2e7f9e2f6f351a082f32e962/d8f9d72a6059252dcadf02c83d9b033b5ab5b935.jpg"; btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //path setShowGif(url, gifImageView, 1); } }); } /** * 播放gif */ public void setShowGif(String url, ImageView imageView, int num) { progressDialog.show(); Glide.with(this) .load(url) .diskCacheStrategy(DiskCacheStrategy.SOURCE)//做缓存 .listener(new RequestListener<String, GlideDrawable>() { @Override public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) { progressDialog.dismiss(); return false; } @Override public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target , boolean isFromMemoryCache, boolean isFirstResource) { progressDialog.dismiss(); // 计算动画时长 GifDrawable drawable = (GifDrawable) resource; GifDecoder decoder = drawable.getDecoder(); int time = 0; for (int i = 0; i < drawable.getFrameCount(); i++) { time += decoder.getDelay(i); } //发送延时消息,动画结束 handler.sendEmptyMessageDelayed(MESSAGE_SUCCESS, time); return false; } }) //加载gif动画. num为加载次数 .into(new GlideDrawableImageViewTarget(imageView, num)); imageView.setVisibility(View.VISIBLE); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv_btn" android:layout_width="150dp" android:layout_height="150dp" android:background="@mipmap/ic_launcher"/> <ImageView android:id="@+id/gif_image" android:scaleType="fitXY" android:background="#00000000" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:visibility="gone"/> </RelativeLayout>没了,是不是特别简单
记得加上依赖
compile 'com.github.bumptech.glide:glide:3.8.0'