MVVM_Android-CleanArchitecture

前言

“Architecture is About Intent, not Frameworks” - Robert C. Martin (Uncle Bob)

Uncle Bob 的这句话套在 MVVM 上也是适用的, MVVM 也仅仅是架构模式(Architectural pattern),其有一套自己的理论概念(pattern)而不是规定的具体实现(或 Frameworks)。早之前在知乎上相关问题的回答(android UI设计MVVM设计模式讨论?)中也简单提到过 MVVM 了,M-V-X 的关系如上图,那么这一次博主把 Fernando Cejas(android10)Android-CleanArchitecture 项目中的 MVP 实现重构成了用 MVVM 来实现。所以看这篇文章最好是先搞清了 Fernando Cejas(android10)Android-CleanArchitecture sample app 和对应的两篇文章(见参考)。整个历程也算比较愉快,没什么不良反应,这篇文章理所当然会重点说说 MVVM 的实现、 Data Binding 等相关的东西。那为什么拥抱 MVVM 呢。当然是 Google 推出官方的 data binding 啦,下一次的 Android MVVM 热潮应该就是 data binding 放出正式版了。

阅读全文

High一下

发现博客访问不了,原来是 GitCafe Pages 又挂了,而且 A 记录也不能用了,所以又得把博客迁回 Github 了。顺便把 High一下 优化了下。基本是直接拿耗子叔的 酷壳 上的 High 一下来用的,存在点击重复播放的问题,而且歌曲只有一首,所以得加以优化下:加了几首歌点击随机播放;修复点击重复执行播放的问题,重新点击后动画重新开始。原来的代码右键 High 一下 审查元素 就看得到了,修改后的代码如下:

阅读全文

【译】解决共享元素在系统UI上绘制的问题

目前为止,我在使用 Activity transitions 中遇到的一个比较烦人的小问题:共享元素会部分地覆盖掉 Status/Navigation/Action Bar,一旦开始过渡动画,共享元素就会很唐突地从系统 UI 下 弹出。这一不和谐的表现可以看看下面这个视频:

阅读全文

【译】NotRxJava懒人专用指南

如果你是一位 Android 开发者,那么这些天你可能已经听到或看到一些关于 RxJava 满天飞的宣传了。RxJava 是一个能让你摆脱编写一些复杂繁琐的代码去处理异步事件的库。一旦开始在你的项目中使用,你会对它爱不释手的。

然而,RxJava 有个缺陷,它需要一个陡峭的学习过程。对于一个从未接触使用过 RxJava 的人来说,是很难一次就领会到它的精髓所在的,对于它的一些使用方法你也可能会很迷惑。在项目中使用它意味着你需要稍微地改变一下你的代码编写思路,另外,这样的学习曲线会使得在项目中因为大规模的使用RxJava而引发一些问题。

当然,关于如何去使用 RxJava 已经有许多的教程和代码范例了。感兴趣的开发者可以访问 RxJava 的官方 Wiki,里面有关于什么是 Observable 以及它和 Iterable、Future 之间关系的很好的解释。Wiki 里有一篇很有用的文章:How To Use RxJava,这篇文章包含怎么去发送事件流并且打印出它们的介绍以及它的样例代码。

但我们要明确的是在还没有学习什么是 Observable 的前提下了解 RxJava 用来解决什么问题以及它是怎么帮助我们组织起异步代码的。

我这篇文章的定位就是 RxJava 官方文档的“前篇”,读完这篇文章能更好地去理解 RxJava 所解决的问题。文章中也有一个小 Demo,就是自己怎么去整理那些凌乱的代码,然后看看我们在没有使用 RxJava 的情况下是怎么去遵循 RxJava 基本原则的。

所以,如果你仍有足够的好奇的话就让我们开始吧!

阅读全文

Android View.OnTouchListener 的子类

如下是几个实现了 OnTouchListener 接口的子类,OnTouchListener 我们是再熟悉不过了,在 Hello World 开始就接触了,但在 Support V4 中还有它的 3 个子类我们平时可能使用的较少但就其功能而言还是对我们很有帮助的。

三者的功能体现在 AutoScrollHelper 和 ZoomButtonsController,前者用于实现控件的自动滚动而后者用于对缩放控件(缩小放大按钮)的处理。

AutoScrollHelper

为了更好阐述它的功能,我们先来看如下的 Gif 图:
ListViewAutoScrollHelper
所以,他能完成的功能就是在 View 的边缘长按时能自动地滚动视图。下面是它的主要方法说明:

阅读全文