加载和控制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();
}
});
}