使用Glide輕鬆播放網絡GIF圖片

使用Glide,輕鬆實現通過網絡鏈接加載GIF圖片

本人喜歡直接上源碼


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佈局


<?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'


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章