RecyclerView的拖动和滑动 第二部分 :拖块,Grid以及自定义动画

原文:Drag and Swipe with RecyclerView Part Two: Handles, Grids, and Custom Animations
翻译:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0724/3219.html by 泡在网上的日子

第一部分,我们介绍了ItemTouchHelper,以及ItemTouchHelper.Callback 的实现,在线性列表(RecyclerView)中添加基本的拖拽&拖放与滑动删除。本文将在前文例子的基础上扩展,增加对grid布局的支持,处理拖拽的初始化,提示被选中的view,同时自定义滑动的动画。

阅读全文

RecyclerView的拖动和滑动 第一部分 :基本的ItemTouchHelper示例

英文原文:Drag and Swipe with RecyclerView
翻译: RecyclerView的拖动和滑动 第一部分 :基本的ItemTouchHelper示例 by 泡在网上的日子
另一个翻译: 拖拽RecyclerView by objectlife


在安卓中,有许多关于如何使用RecyclerView实现“drag & drop”“wipe-to-dismiss”的教程,库和例子。即使现在已经有了新的,更优的实现方式,大多数仍然是使用老旧的View.OnDragListener以及Roman Nurik在SwipeToDismiss中所使用的方法。很少有人使用新的api,反而要么经常依赖于GestureDetectorsonInterceptTouchEvent,要么实现方式很复杂。实际上,在RecyclerView上添加拖动特性有一个非常简单的方法。这个方法只需要一个类,并且它也是Android 兼容包的一部分,它就是:

ItemTouchHelper

ItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类,也就是说它可以轻易的添加到几乎所有的LayoutManager和Adapter中。它还可以和现有的item动画一起工作,提供受类型限制的拖放动画等等,

这篇文章中,我会演示一个ItemTouchHelper的简单实现,然后在这个系列文章的后面部分,我们将拓展范围,探索一些新的特性。

阅读全文

在RecyclerView上使用布局动画

原文:Layout animations on RecyclerView
翻译: 在RecyclerView上使用布局动画(Layout animation) by 泡在网上的日子
本文可以结合 Android LayoutAnimation使用及扩展 一起阅读。

自动Material Design出现以来,我对一些视频中演示的网格铺开动画感到惊讶。这是一种斜对角线动画,让activity从上到下从左到右铺开。非常漂亮。

我一直试图尝试所有能得到那种效果的方法。一种办法是,使用RecyclerView::notifyItemInserted()方法,这是很多人都提到的办法。但是这个方法没有提供太多控制动画顺序的方法,因此看起来并不是一个好办法。另一个就是在onBind()中必要的时候对每个元素使用动画,这也的确可行。但是那样的话代码就比较脆弱和过于侵入性(我们是在adapter中添加的动画)。要让它恰当的工作比较困难。

阅读全文

Android实现波浪效果 - WaveView

先上效果图
WaveView截图

实现

WaveView的属性

WaveView的属性


Wate Level(水位)

波浪静止时水面距离底部的高度

Amplitude(振幅)

波浪垂直振动时偏离水面的最大距离

Wave Length(波长)

一个完整的波浪的水平长度

Wave Shift(偏移)

波浪相对于初始位置的水平偏移

阅读全文

Gradle多渠道打包

原文: Android Studio系列教程六--Gradle多渠道打包 ,

美团采用了另外一种hack的方式快速为多渠道打包: 美团Android自动化之旅—生成渠道包,在META-INF文件夹下添加不同的空文件。

由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。

阅读全文

Material Design 风格的设置页面

设置页面是 Android 开发 APP 几乎必须的一个页面。

Google 在发布 Material Design 的一些兼容包的时候,一直没有解决的一个大问题就是设置页面。让device-2015-02-20-132630人很蛋疼的是,如果你继承 PreferenceActivity 来做设置页面的话,会导致你的这个页面 ActionBar 丢失,完全显示不出来,丑,而且官方貌似一直没有解决,真不知怎么想的。所以一般我们的解决办法就是使用 Activity + Fragment 来保留 ActionBar 又能使用简易的 PreferenceFragment。

阅读全文

Android中Handler引起的内存泄露

在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。通常我们的代码会这样实现。

1
2
3
4
5
6
7
8
9
public class SampleActivity extends Activity {
private final Handler mLeakyHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
// ...
}
}
}

但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告

In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class

看到这里,可能还是有一些搞不清楚,代码中哪里可能导致内存泄露,又是如何导致内存泄露的呢?那我们就慢慢分析一下。

阅读全文