简介
android不推荐使用gif图片,一般都是png的,对于gif的图片解析比较消耗资源,但是对于一些动态gif图片的播放,如果比较小的话还是可以的,要是大的话,建议还是把gif图片转换成一帧一帧的png图片,然后通过animation播放。 对于小的gif动态图片,可以通过Movie来播放。 注意,不能再布局中以自定义view的形式使用。
Activity
public class MainActivity extends Activity { LinearLayout root; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); root = (LinearLayout) findViewById(R.id.root); root.addView(new CustomGifView(this, R.drawable.loading)); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#666" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="简单的展示GIF动态图" /> </LinearLayout>
自定义View
/** * 自定义View 播放Gif动画 */ public class CustomGifView extends View { private Movie mMovie; private long mMovieStart; public CustomGifView(Context context, int resId) { super(context); //读入字节流(或字节数组或文件)来解码创建Movie对象 mMovie = Movie.decodeStream(getResources().openRawResource(resId)); } public void onDraw(Canvas canvas) { long now = android.os.SystemClock.uptimeMillis();//系统当前时刻 //第一次播放 if (mMovieStart == 0) mMovieStart = now;//动画开始的时间 if (mMovie != null) { int dur = mMovie.duration();//动画持续的时间,也就是完成一次动画的时间 if (dur == 0) dur = 1000; int relTime = (int) ((now - mMovieStart) % dur);//注意这是取余操作,这才能算出当前这次重复播放的第一帧的时间 mMovie.setTime(relTime);//设置相对本次播放第一帧时间,根据这个时间来决定显示第几帧 mMovie.draw(canvas, 0, 0); //强制重绘 invalidate(); } } }
时间: 2024-12-25 08:16:23