FloatingView

Project Url: cxMax/FloatingView
Introduction: Android 首页悬浮广告,可任意拖拽,可监听常用的 ViewPager,RecyclerView 随上下滑动隐藏\显示悬浮广告,滑动监听支持绑定 RecyclerView 和 ScrollView\ViewPager. 支持 Gif 图片的播放(不使用 Gilde)-2016/08/24
More: Author   ReportBugs   
Tags:

介绍

Android 首页悬浮广告,可任意拖拽, 支持 Gif 图片的播放(不使用 Gilde 播放 / 使用 glide 播放优化 gif 内存占用问题)
继承 ImageView, 拥有与 ImageView 一样的 api

功能

  • 显示/隐藏
  • 拖拽 - 只需在 xml 布局文件中设置 app:draggable="true",即可。

用法:

  <com.cxmax.library.FloatingView
        android:id="@+id/float_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:src="@mipmap/float_ad_default"
        app:draggable="true" />

关于 Gif 图片的播放

  • 不使用 Gilde:
    ps : gif 图的播放在 java 层实现, 内存和性能表现并不好.

    GifDecoder.with(getActivity()).load(current_appAdStructItem.img_url, new GifDecoder.OnLoadGifListener() {
                  @Override
                  public void loadGifSuccess(File file) {
                      GifDecoder.with(getActivity()).load(file).into(mFloatingView);
                  }
    
                  @Override
                  public void loadGifFailed() {
                      // fail
                  }
              }).into(mFloatingView);
    
  • 使用 Glide
  • 引用第三方库, 让 gif 播放在 Native 层实现, 避免 java 层内存增长和性能问题
    compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.7'
    
  • 引用 Glide, 并改写 Glide 做了上层封装, 用法跟 glide 网络加载普通图片一样.
    使用第三方库的 GifDrawable(native 层实现)替换 Glide 的 GifDrawable(java 层实现) , 具体做了封装, 有兴趣的话看 library 的实现;
             Glide
                 .with(context)
                 .using(new StreamStringLoader(context), InputStream.class)
                 .from(String.class) 
                 .as(byte[].class)
                 .transcode(new GifDrawableByteTranscoder(), GifDrawable.class) 
                 .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
                 .decoder(new StreamByteArrayResourceDecoder())  
                 .sourceEncoder(new StreamEncoder())
                 .cacheDecoder(new FileToStreamDecoder<byte[]>(new StreamByteArrayResourceDecoder()))
                 .load(gifUrl)
                 .error(placeholder)
                 .fallback(placeholder)
                 .into(imageView);
    

效果图:

image

License MIT

Copyright (C) 2016 cxMax
Copyright (C) 2016 FloatingView

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools