GroupSnapHelper

Android Support Library v24.2.0 版中,RecyclerView 新增加了 OnFlingListener 接口, 同时提供了SnapHelper 抽象类和 LinearSnapHelper 实现类,用来处理在滚动过程中的定位。试用了一下 LinearSnapHelper , 使用的场景类似 WheelPicker 或 ViewPager,滚动后能将最接近 RecyclerView 中心的 closestItem 滚动居中。 想了一下,可以用这一特性来实现滑动一组 items ,代替 ViewPager 嵌套 RecyclerView 的情况。 如图: 代码见 GroupSnapHelper 在 LinearSnapHelper 和 SnapHelper 之间绕了半天,发现其实实现起来也挺简单的,在 LinearSnapHelper 基础上根据查找到的 closestItem , 再查找计算包含 closestItem…

Read this article

Goodbye Apache-HttpClient, Hello OkHttpClient

Android 从 M 开始取消支持 Apache-HttpClient,对于一直喜欢使用 android-async-http 的我来说,得换网络框架了,好麻烦啊!虽然官方推荐使用 HttpURLConnection,但 OkHttpClient 更好嘛。以前也试用过 OkHttpClient ,但总会有些或多或少的问题,没敢正式使用。现在 OkHttpClient 都 2.5.0 了, 更加稳定,是时候该用上了。 为了兼容以前 android-async-http 的使用习惯和特性,写了个模块包装一下OkHttpClient,用起来同样轻松愉快 : OkHttpManager post/get 需要支持同步、异步请求,共用一套Callback. RequestParams 可以添加各种类型参数、File、Stream. 可以添加CookieStore 哦,对了关于Callback仅仅只有最基本的 BaseCallback , 什么都没实现。毕竟 Callback…

Read this article

PhotoDraweeView

前段时间 Facebook 祭出大杀器 Fresco,基本解决了所有 Android 图片加载需求,相比现有图片加载库,最大的亮点就是三级缓存,然后其它零零碎碎的小需求都已近写好了,用起来简单省心。于是趁着有空就开始逐步把项目里的图片加载改成 Fresco。 但在图片缩放预览就卡住了,Fresco 还不支持缩放平移等,常见的一些图片缩放库都是使用 ImageView 和 Drawable 来实现基本功能。而且 Fresco 文档里明确指出它的 DraweeView 和系统的 ImageView 将会是两个独立的控件,DraweeView 里又有许多不同特性的 Drawable,无法简单获取真正图片的 Drawable。 所以只能自己实现了,写了下面这个: PhotoDraweeView 参照 PhotoView 和 Fresco 的一些 issues。实现了常用的双指缩放、双击缩放、平滑移动。因为 Fresco 版本升级很快,API 可能也会有少许变动,…

Read this article

ViewPagerHeader滚动

【Update 2015.09.06】使用新的Android Design Support Library中的 CoordinatorLayout可以完美实现这个功能。 这不太会起标题的名字了。简单来说想在 ViewPager 上方加一个 Header,当 ViewPager 内部滚动时,同时或者优先滚动顶部的 Header。 总结一下,大概有3种方案。 Android 5.0 电话里联系人。 当 ViewPager 内部列表向上滚动时,Actionbar 滚动隐藏,向下滚动时跟着出现。不过这是 API 21 的新特性(setHideOnContentScrollEnabled(boolean hideOnContentScroll) 和 setNestedScrollingEnabled (boolean enabled)),不能广泛使用。 Google Play 应用列表。 首先需要给 ViewPager 内部的 ListView…

Read this article

使用manifestPlaceholders

发现前几天 Android Studio Gradle Plugin 发布了0.13.0版, 终于支持Gradle 2.1了。其中Product Flavors能支持AndroidManifest placeholder了,赶紧应用起来。 比如我需要打包不同渠道的APK,需要在AndroidManifest中定义渠道名称,以便在java中调用。以前ant或gradle打包时动态改变渠道的思路是:正则AndroidManifest的特定字符然后替换。新版本直接可以省掉自己编写正则的过程啦。 旧版gradle编写(参考友盟渠道打包) AndroidManifest.xml <meta-data android:name="channel" android:value="CHANNEL_VALUE"/> builde.gradle android { productFlavors { "xiaomi"{} "360market"{} "baidu"{} "wandoujia"{} } applicationVariants.all { variant -> variant.processManifest.…

Read this article

CircleIndicator

使用ViewPager的时候,经常需要一些小圆点作为指示器。现成的 Android-ViewPagerIndicator 太过庞大。 Nexus 5桌面(Google Now Launcher)的指示器效果就挺不错的,但我没有找到类似的项目,于是就写了个 CircleIndicator 可以自定义大小、形状和动画。感觉有这几点基本上就可以配置出各种不同的效果了。 兼容Android低版本,动画需要依赖NineOldAndroids。 Gradle dependencies { compile 'com.nineoldandroids:library:2.4.+' compile 'me.relex:circleindicator:1.0.0@aar' }…

Read this article