zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    原创:微信小程序页面跳转展示缓冲提示
    转发:微信小程序-template模板使用
    JS正则判断输入框是否仅仅含有汉字、字母和数字
    jQuery使用正则判断是否含有非法字符
    允许远程用户登录访问mysql的方法
    如何使php页面中不再出现NOTICE和DEPRECATED的错误提示
    原生php如何获取当前页面的url
    jQuery写缓存之:sessionStorage的运用,配合PHP将不同tab页的数据写入后台
    TP2.0或3.1 或者 3.2 下使用ajax+php做无刷新分页(转+自创)
    jquery中的replaceWith()和html()的区别
  • 原文地址:https://www.cnblogs.com/zhangqie/p/10845756.html
Copyright © 2011-2022 走看看