Android加载本地gif动画

作者: 菜鸟的姿态 | 来源:发表于2017-05-10 16:37 被阅读217次

    Android官方并未提供直接显示gif图片资源的功能,我们可以通过Fresco图片加载库实现。Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。Fresco的功能非常强大,建议有兴趣的同学参考官网了解更多细节,以下只针对“加载本地gif动画功能”:

    1. 添加Gradle依赖:

      dependencies {
          // fresco库依赖
          compile 'com.facebook.fresco:fresco:1.0.1'
          // 支持GIF动图,需要添加
          compile 'com.facebook.fresco:animated-gif:1.0.1'
      }
      
    2. 自动播放本地gif动画:

      • xml文件
      <com.facebook.drawee.view.SimpleDraweeView
          android:id="@+id/ic_arrow"
          android:layout_width="15dp"
          android:layout_height="15dp"
          android:layout_marginBottom="5dp"/>
      
      • java代码
           // 设置箭头gif
          final SimpleDraweeView simpleDraweeView = (SimpleDraweeView)findViewById(R.id.ic_arrow);
          Uri uri = new Uri.Builder()
                  .scheme(UriUtil.LOCAL_RESOURCE_SCHEME)
                  .path(String.valueOf(R.drawable.ic_bill_guide_arrow_gif))
                  .build();
          DraweeController controller = Fresco.newDraweeControllerBuilder()
                  .setUri(uri)
                  .setAutoPlayAnimations(true)
                  .build();
          simpleDraweeView.setController(controller);
      
    3. 手动控制gif动画的播放|停止

      以上代码实现为加载本地res中的drawable资源文件,且设置为自动播放模式。如果需要手动控制gif动画的开始|结束,需要通过android.graphics.drawable.Animatable控制!

      ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
          @Override
          public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) {
              if (anim != null) {
                // 图片资源加载完成的回调函数
                anim.start();
              }
          }
      

    };

    Uri uri;
    DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setUri(uri)
        .setControllerListener(controllerListener)
        // other setters
        .build();
    mSimpleDraweeView.setController(controller);
    ```
    DraweeController向外提供Animatable的接口,当Animatable不为null,可以直接通过Animatable控制gif动画的播放。
    
    ```java
    Animatable animatable = mSimpleDraweeView.getController().getAnimatable();
    if (animatable != null) {
        animatable.start();
        // later
        animatable.stop();
    }
    ```
    
    1. 参考资料:

      http://frescolib.org/docs/index.html

      http://frescolib.org/docs/animations.html#playing-animations-manually

    相关文章

      网友评论

        本文标题:Android加载本地gif动画

        本文链接:https://www.haomeiwen.com/subject/lfegtxtx.html