Android 显示和控制gif动态图片的播放

加载和控制gif动态显示和播放控制。使用第三方库,加载和控制都非常简单。这里有对播放的控制有两种情况,一是直接控制播放(按钮),和使用MediaPlayerControl控制。github上放了一个例子:点击跳转下面是效果:
图片
适用于:Android 2.3+ (API level 9+)

1.加载gif动图

只是加载的话,非常简单。在gradle中加入如下代码后同步:

compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.8'

上面使用的第三方库文件的github原网址:点击跳转

这里在布局文件里都是用的是GifImageView,这个就是gif的view,就像ImageView。drawable/hzw是提前准备的一张gif图。下载gif图片

 <pl.droidsonroids.gif.GifImageView
       android:id="@+id/giv1"
       android:src="@drawable/hzw"
       android:layout_width="wrap_content"
       android:layout_height="200dp"/>

2.直接控制播放(这里是按钮控制)

可以提供的控制如下表,都是GifDrawable 对象的方法,而不是:GifImageView 的方法。reset效果与原网址讲解略有不同,以实际效果总结:

方法 效果
stop() 停止动画,能被任何线程调用
start() 开始或者说继续动画,
isRunning() 返回动画是否正在播放
reset() 正在播放的动画从开头开始播放,可以开始播放已经停止的动画
setSpeed(float factor) 设置播放速度,如factor为2.0f表示两倍速度播放
seekTo(int position) 动画在时间为position毫秒的位置播放
getDuration() 返回动画持续循环时间
getCurrentPosition() 从当前动画循环开始返回经过时间

在onCreate中调用initGiv1();

GifImageView giv1;//由按键控制播放的gif
GifDrawable gifDrawable;//资源对象
...
//初始化由按键控制播放的gif
    private void initGiv1() {
        giv1 = (GifImageView) findViewById(R.id.giv1);
        //这里控制播放的对象实际是gifDrawable
        try {
            gifDrawable = new GifDrawable(getResources(), R.drawable.hzw);
            giv1.setImageDrawable(gifDrawable);//这里是实际决定资源的地方,优先级高于xml文件的资源定义
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //下面是按钮点击响应事件监听
    //开始/继续播放
    public void startClick(View v) {
        gifDrawable.start();
    }

    //暂停播放
    public void stopClick(View v) {
        gifDrawable.stop();
    }

    //重新开始播放
    public void resetClick(View v) {
        gifDrawable.reset();
    }

3.使用MediaPlayerControl控制播放

在onCreate()中调用如下initGiv2()方法,这里设置成,点击gif则显示播放控制的控件(MediaPlayerControl控件)。注意,mc.show()不能放在onCreate()中,必须在activity加载完成后才能调用。

GifImageView giv2;//由MediaPlayerControl控制的播放的gif

...
//初始化由MediaPlayerControl控制的播放的gif
    private void initGiv2() {
        giv2 = (GifImageView) findViewById(R.id.giv2);
        final MediaController mc = new MediaController(this);
        mc.setMediaPlayer((GifDrawable) giv2.getDrawable());
        mc.setAnchorView(giv2);
        giv2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mc.show();
            }
        });
    }

猜你喜欢

转载自blog.csdn.net/htwhtw123/article/details/78137512