近来在 github 上发布了一个 repo——Android-SlideSupport-ListLayouts
,点此访问项目
Android-SlideSupport-ListLayouts 是一款用于为 Android 上的 List 排布提供左滑右滑操作的库。目前支持的 Layout 主要有: ListView、RecyclerView、ScrollView、ExpandableListView 等。另外还可以与 SwpieRefreshLayout、PullToRefresh 等等第三方库协同工作。
<br />
1、支持的 Layout
- ListView
- RecyclerView
- ExpandableListView
- ScrollView
-
SwipeRefreshLayout + xxxView
-
PullToRefresh + xxxView
2、相关下载
3、使用预览
ListView |
RecyclerView + SwipeRefreshLayout |
ListView + PullToRefresh Library |
[图片上传失败...(image-c66472-1509674638134)] |
[图片上传失败...(image-7a3a9b-1509674638134)] |
[图片上传失败...(image-bf1190-1509674638134)] |
ExpandableListView |
Customized Slide Action |
[图片上传失败...(image-d6e2db-1509674638134)] |
[图片上传失败...(image-5b7ada-1509674638134)] |
4、使用方式
4.1、XML 中指定滑动 View 和滑动动作
<com.straw.library.slide.widget.SlideSupportListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:leftViewId="@+id/fav_item"
app:rightViewId="@+id/delete_item"
app:contentViewId="@+id/sample_item"
app:slideStyle="moveWithContent"
app:slideInterpolator="@android:anim/decelerate_interpolator"
app:slideDuration="200"/>
4.2、为 SlideSupportListView 配置 Adapter
SlideSupportListView.SlideAdapter adapter = new SlideSupportListView.SlideAdapter {
// ...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SampleItemHolder holder = null;
if (convertView != null) {
holder = (SampleItemHolder) convertView.getTag();
} else {
SlideSupportLayout layout = createSlideLayout(parent);
View.inflate(mContext, R.layout.layout_item_with_delete, layout);
holder = new SampleItemHolder(layout, mListView, mDataSetChangedListener);
convertView = layout;
convertView.setTag(holder);
}
holder.update(mItemList.get(position));
return convertView;
}
}
可以看出,和平常所用 Adapter 主要的不同在 getView 的时候:
SlideSupportLayout layout = createSlideLayout(parent);
View.inflate(mContext, R.layout.layout_item_with_delete, layout);
convertView = layout;
4.3、支持的滑动类型
滑动类型 |
作用 |
none |
不进行任何滑动 |
leftToRight |
只支持手指从左往右滑动 |
rightToLeft |
只支持手指从右往左滑动 |
both |
左右两个方向的滑动均支持 |
4.4、XML 中支持的滑动动作
滑动动作 |
作用 |
moveItemOnly |
只滑动配置的 View |
moveWithContent |
同时滑动配置的 View 和 contentView |
scaleItem |
缩放配置的 View |
rotateItem |
旋转配置的 View |
alphaItem |
调整配置 View 的透明度 |
4.5、XML 中支持配置的属性
属性 |
作用 |
slideMode |
配置滑动类型(none 、leftToRight 、rightToLeft 、both ) |
slideStyle |
配置滑动动作(一次性指定左右两个方向的滑动动作) |
leftToRightSlideStyle |
指定从左往右滑动的动作 |
rightToLeftSlideStyle |
指定从右往左滑动的动作 |
leftViewId |
指定左边的滑动 View Id |
rightViewId |
指定右边的滑动 View Id |
contentViewId |
指定整个根 View 的 Id,以支持联动 |
slideDuration |
滑动时长,ms |
slideInterpolator |
滑动的插值器,如 @android:anim/decelerate_interpolator
|
<br />
其中,Move、Scale、Rotate 还可以单独指定属性:
属性 |
生效的动作类型 |
作用 |
slideMoveDistance |
moveItemOnly & moveWithContent
|
手动设置滑动距离(很少用到,除非有非常特殊的情况) |
属性 |
生效的动作类型 |
作用 |
fromScale |
scaleItem |
缩放开始比例 |
toScale |
scaleItem |
缩放结束比例 |
scaleDuration |
scaleItem |
缩放时长,ms |
<br />
属性 |
生效的动作类型 |
作用 |
fromScale |
scaleItem |
缩放开始比例 |
toScale |
scaleItem |
缩放结束比例 |
scaleDuration |
scaleItem |
缩放时长,ms |
属性 |
生效的动作类型 |
作用 |
fromDegree |
rotateItem |
旋转开始角度 |
toDegree |
rotateItem |
旋转结束角度 |
rotateDuration |
rotateItem |
旋转时长,ms |
<br />
属性 |
生效的动作类型 |
作用 |
fromDegree |
rotateItem |
旋转开始角度 |
toDegree |
rotateItem |
旋转结束角度 |
rotateDuration |
rotateItem |
旋转时长,ms |
属性 |
生效的动作类型 |
作用 |
fromAlpha |
alphaItem |
开始透明度,[ 0, 1.0f ] |
toAlpha |
alphaItem |
结束透明度,[ 0, 1.0f ] |
alphaDuration |
alphaItem |
透明度渐变时长,ms |
<br />
属性 |
生效的动作类型 |
作用 |
fromAlpha |
alphaItem |
开始透明度,[ 0, 1.0f ] |
toAlpha |
alphaItem |
结束透明度,[ 0, 1.0f ] |
alphaDuration |
alphaItem |
透明度渐变时长,ms |
5、XML 中必须配置的属性
一般来说,大部分属性都有默认值,如果你要一个简单的效果,有下面几项在对应情况下是必须配置的:
-
leftViewId
:想要从左往右滑动效果时必须指定
-
rightViewId
:想要从右往左滑动效果时必须指定
-
contentViewId
:想要滑动 View 和 contentView 联动时必须配置(如 slideStyle 为 moveWithContent
)
6、滑动动作列表
滑动的具体展现方式是通过 SlideHandler
来配置的,目前支持的滑动动作列表如下:
动作 |
是否支持在 XML 中指定 |
作用 |
MoveItemOnlySlideHandler |
是,moveItemOnly
|
只滑动指定的 View |
MoveWithContentSlideHandler |
是,moveWithContent
|
联动滑动 ContentView 和指定的 View |
ScaleSlideHandler |
是,scaleItem
|
缩放指定的 View |
RotateSlideHandler |
是,rotateItem
|
旋转指定的 View |
AlphaSlideHandler |
是,alphaItem
|
调整指定 View 的透明度 |
CompositeSlideHandler |
是,通过 leftToRightStyle 和 rightToLeftStyle 指定 |
组合两个动作 Handler,分别为左滑和右滑指定单独的动作 |
DelayTimeSlideHandler |
否 |
延时器,比如这个滑动动作需要延时若干 ms 再执行 |
SlideHandlerSet |
否 |
动作叠加器,可叠加若干动作同时执行 |
SlideHandlerSequence |
否 |
动作序列,可将若干动作按顺序依次执行 |
CallbackSlideHandler |
否 |
动作执行回调,可和 SlideHandlerSequence 结合执行,在某个动作执行完后回调 |
7、自定义动作
可以通过实现 SlideHandler
接口来实现自己的动作,通过 SlideSupporter.setSlideHandler
方法设置到对应的 View。具体可参考 samples 中的 CustomizedSlideActionLayout
的实现。
8、License
/*
* Copyright (C) 2015 Arno Zhang
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
网友评论