目前支持Gif播放的開源庫還是有的,試了一下還是這種好用點,所以來分享下
android-gif-drawable是通過JNI來渲染幀的,這種方式比使用WebView或者Movie效率要高
要求
Android 4.2+(API級別17+)
用於GifTextureView硬件加速渲染
適用於GifTexImage2DOpenGL ES 2.0+
效果圖:
GifDrawable 可以直接從各種來源構建:
//資產文件 GifDrawable gifFromAssets = new GifDrawable(getAssets(), “ anim.gif ”); //資源(可拉伸或原始) GifDrawable gifFromResource = 新 GifDrawable(getResources(), - [R 。可拉伸。阿尼姆); // Uri ContentResolver contentResolver = ... //對於file可以為null:// Uris GifDrawable gifFromUri = new GifDrawable(contentResolver,gifUri); // byte array byte [] rawGifBytes = ... GifDrawable gifFromBytes = new GifDrawable(rawGifBytes); // FileDescriptor FileDescriptor fd = new RandomAccessFile( “/ path/anim.gif ”, “ r ”)。getFD(); GifDrawable gifFromFd = new GifDrawable(fd); //文件路徑 GifDrawable gifFromPath = new GifDrawable( “/ path / anim.gif ”); // file File gifFile = new File(getFilesDir(), “ anim.gif ”); GifDrawable gifFromFile = new GifDrawable(gifFile); // AssetFileDescriptor AssetFileDescriptor afd = getAssets()。openFd( “ anim.gif ”); GifDrawable gifFromAfd = new GifDrawable(afd); // InputStream(必須支持標記) InputStream sourceIs = ... BufferedInputStream bis = new BufferedInputStream(sourceIs, GIF_LENGTH); GifDrawable gifFromStream = new GifDrawable(bis); // direct ByteBuffer ByteBuffer rawGifBytes = ... GifDrawable gifFromBytes = new GifDrawable(rawGifBytes);
效果圖代碼:
<pl.droidsonroids.gif.GifImageView android:id="@+id/gif_image_view1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:src="@mipmap/gif1" />
GifImageView gifImageView1= findViewById(R.id.gif_image_view1); File file = new File("/storage/emulated/0/Android/data/com.zhangqie.gif/cache/thumb/SpiderDressUp.gif"); try { //file方式 //GifDrawable gifFromPath = new GifDrawable(file); //直接給地址 GifDrawable gifFromPath = new GifDrawable("/storage/emulated/0/Android/data/com.zhangqie.gif/cache/thumb/SpiderDressUp.gif"); gifImageView1.setImageDrawable(gifFromPath); } catch (IOException e) { e.printStackTrace(); } /*gifDrawable.start(); //開始播放 gifDrawable.stop(); //停止播放 gifDrawable.reset(); //復位,重新開始播放 gifDrawable.isRunning(); //是否正在播放 gifDrawable.setLoopCount( 2 ); //設置播放的次數,播放完了就自動停止 gifDrawable.getCurrentLoop(); //獲取正在播放的次數 gifDrawable.getCurrentPosition() ; //獲取現在到從開始播放所經歷的時間 gifDrawable.getDuration() ; //獲取播放一次所需要的時間 gifDrawable.recycle();//釋放內存*/ 點擊事件 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: gifDrawable.stop(); break; case R.id.btn2: gifDrawable.start(); break; } }
代碼文檔:https://github.com/koral--/android-gif-drawable