Android 加载gif图,Glide

个人中心

DownLoad

Android 可以使用 Glide、Picasso、Fresco 等第三方库来加载 gif 图。

Glide 为例,可以按照以下步骤加载 gif 图:

1. 在 build.gradle 文件中添加 Glide 的依赖:

```
dependencies {
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}
```

2. 在布局文件中添加 ImageView 控件:

```
<ImageView
    android:id="@+id/imageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
```

3. 在代码中使用 Glide 加载 gif 图:

```
Glide.with(this).load(R.drawable.gif_image).into(imageView);
```

其中,R.drawable.gif_image 是 gif 图片的资源 id。

如果需要设置 gif 图片的属性,可以使用 RequestOptions:

```
RequestOptions options = new RequestOptions()
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .override(300, 300)
    .centerCrop();

Glide.with(this)
    .load(R.drawable.gif_image)
    .apply(options)
    .into(imageView);
```

其中,placeholder 和 error 是占位图和错误图,override 是设置图片的大小,centerCrop 是设置图片的缩放类型。

Android 原生支持 GIF 图片的加载,可以使用 `Movie` 类来加载和播放 GIF 图片。

以下是加载 GIF 图片的示例代码:

```java
public class MainActivity extends AppCompatActivity {

    private ImageView mImageView;
    private Movie mMovie;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mImageView = findViewById(R.id.imageView);

        // 加载 GIF 图片
        InputStream inputStream = getResources().openRawResource(R.raw.sample_gif);
        mMovie = Movie.decodeStream(inputStream);

        // 设置 ImageView 的宽高
        mImageView.setMinimumWidth(mMovie.width());
        mImageView.setMinimumHeight(mMovie.height());

        // 开始播放 GIF 图片
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mImageView.invalidate();
                        }
                    });
                }
            }
        }).start();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        long now = android.os.SystemClock.uptimeMillis();
        if (mMovieStart == 0) {
            mMovieStart = now;
        }
        if (mMovie != null) {
            int duration = mMovie.duration();
            if (duration == 0) {
                duration = 1000;
            }
            int relTime = (int) ((now - mMovieStart) % duration);
            mMovie.setTime(relTime);
            mMovie.draw(canvas, 0, 0);
            invalidate();
        }
    }
}
```

在上面的代码中,我们首先使用 `Movie.decodeStream()` 方法加载 GIF 图片,然后设置 ImageView 的宽高为 GIF 图片的宽高。接着,我们使用一个线程不断调用 `ImageView.invalidate()` 方法来刷新 ImageView,从而实现 GIF 图片的播放。最后,在 `onDraw()` 方法中,我们使用 `Movie.draw()` 方法将 GIF 图片绘制到 Canvas 上。

猜你喜欢

转载自blog.csdn.net/YDHIT/article/details/130890506