android -------- GifImageView 之gif圖片加載


目前支持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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM