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

Android Underline

以为手机UI设计里一般不会碰到使用下划线的情况,但断断续续还是有不少使用下划线的情况。 我是不太喜欢下划线的样式,以前搞前端时表现网页链接,也喜欢仅仅使用颜色区分。即使要使用下划线也避免用text-decoration:underline,而是使用border-bottom的绘制。 为了还原设计稿上的下划线,在Android上要实现类似border-bottom的下划线其实也不是很复杂。首先得了解一下字体相关的知识,默认的下划线一般是绘制在Baseline下,为了调整下划线和字体的间距,决定将下划线绘制在Descender Line下。 想了两套方案: 类似ImageSpan的形式:将要显示下划线的文字用图片绘制,同时绘制下划线,使用SpannableString替换TextView的文字。 优点:灵活使用,可以在任意TextView或EditText中使用。 缺点:不支持换行,文字不能编辑。文字转图片开销有点不划算。 自定义控件:在onDraw时绘制下划线。这种方式最简单啦,又能支持换行。(偷懒就让所有文字都显示下划线,要个别文字显示下划线还得查找字符测量宽度慢慢计算)。 具体代码参见 github,预览图:…

Read this article

迁移到Android Studio

上星期决定将Android的开发环境迁移到Android Studio。 契机是同样体验Android L预览版的SDK,Eclipse + ADT 相比 Android Studio + gradle ,前者相关的更新实在太慢了,估计以后也不会好了…… 这篇主要记录一下迁移到Android Studio(v0.8.1)环境,主要的设置等。 首先设置Android Studio的HTTP Proxy,貌似Android Studio不会走系统代理,没有代理的话,国内根本跑不起来。 接下来设置keymap(这个需要长期摸索)、设置Code Style(可以用 Square厂的样式)、Sdk Manager更新等。 Android Studio会自带的SDK在 /Applications/Android Studio.app/sdk 目录下,可以重新指定SDK路径。如果以前在环境变量里配置过SDK路径,记得保持一致。要用命令行编译打包,需要从gradle官网下载gradle安装待用。 最新版的Android Studio导入Eclipse的工程,已经很完善了。…

Read this article