Material Design系列,Behavior之SwipeDismissBehavior
Behavior,Android-MD2016-07-18
版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003
Material Design系列,Behavior之BottomSheetBehavior与BottomSheetDialog
在我的群(百度:严振杰 愚公移山可找到群)里听说Behavior很难,我就去玩了玩。选中Behavior
然后ctrol + t
后发现Behavior
的一个实现类:SwipeDismissBehavior
,顾名思义它就是用来实现滑动删除的了。我们之前出过一篇RecyclerView利用ItemTouchHelper拖拽排序/滑动删除Item的博客,那我们今天来看看SwipeDismissBehavior
是如何玩的,是否可以替代RecyclerView
自带的ItemTouchHelper
?
上一篇博客讲了 Material Design系列,Behavior之BottomSheetBehavior与BottomSheetDialog,我们知道不论BottomSheetBehavior
还是ScrollingViewBehavior
都可以在xml中直接指定:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
...
app:layout_behavior="@string/bottom_sheet_behavior"
还有我们知道app:layout_behavior=""
的值是Behavior
的全类名,虽然是字符串。于是乎,当我看到SwipeDismissBehavior
我也在string.xml中定义了一下:
<string name="swipe_dismiss_behavior">android.support.design.widget.SwipeDismissBehavior</string>
我也像上面那么引用了,结果就报错了,心里哇凉哇凉的:
android.view.InflateException: Binary XML file line #19: Could not inflate Behavior subclass android.support.design.widget.SwipeDismissBehavior
所以用法肯定不是这样的,且看我怎么解决。
首先翻官网的资料,全都是英文的,还要翻墙。各位看官根据自己的情况看着办噢。
经过我的一番折腾,这货原来是这样用的,首先上我的布局:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorlayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<TextView
android:id="@+id/textview"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="60dp"
android:background="@android:color/holo_blue_bright"
android:gravity="center"
android:text="滑动删除我呀" />
</android.support.design.widget.CoordinatorLayout>
简单解释下,一个CoordinatorLayout
下一个Toolbar
,一个TextView
,我们滑动删除的就是这个TextView
。
然后上Java代码:
SwipeDismissBehavior swipeDismissBehavior = new SwipeDismissBehavior();
swipeDismissBehavior.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_ANY);
CoordinatorLayout.LayoutParams coordinatorParams = (CoordinatorLayout.LayoutParams) findViewById(R.id.textview).getLayoutParams();
coordinatorParams.setBehavior(swipeDismissBehavior);
一运行我发现真的可以了唉,哎呀我擦累,好简单啊这货,不过这货还是有些属性的:
// 告诉如果一个视图设置阈值一直拖到足以被关闭。
swipeDismissBehavior.setDragDismissDistance(0.5F);
// 最小滑动距离时view的透明度。
swipeDismissBehavior.setStartAlphaSwipeDistance(0F);
// 最大滑动距离时biew的透明度。
swipeDismissBehavior.setEndAlphaSwipeDistance(0.5F);
// 阀值,也就是敏感度。
swipeDismissBehavior.setSensitivity(0);
// 滑动方向。
swipeDismissBehavior.setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_START_TO_END);
还可以设置关闭监听等:
swipeDismissBehavior.setListener(onDismissListener);
private SwipeDismissBehavior.OnDismissListener onDismissListener = new SwipeDismissBehavior.OnDismissListener() {
@Override
public void onDismiss(View view) {
}
@Override
public void onDragStateChanged(int state) {
}
};
到这里就结束了,不过我们还是回到文章的开头,那么我们的问题来了?SwipeDismissBehavior
可以替代RecyclerView
的ItemTouchHelper
或者其他列表滑动删除库吗?
答案是不能。
因为CoordinatorLayout
遍历子View的时候,只遍历了第一层view,而列表的滑动删除对象是在RecyclerView
的里面,不是CoordinatorLayout的直接子view。所以SwipeDismissBehavior
只可以用在CoordinatorLayout
的子View上。
版权声明:转载必须注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003