int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder)
ItemTouchHelper.UP //滑动拖拽向上方向 ItemTouchHelper.DOWN//向下 ItemTouchHelper.LEFT//向左 ItemTouchHelper.RIGHT//向右 ItemTouchHelper.START//依赖布局方向的水平开始方向 ItemTouchHelper.END//依赖布局方向的水平结束方向
boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
void onSwiped(RecyclerView.ViewHolder viewHolder, int direction)
/** * Item是否支持长按拖动 * * @return * true 支持长按操作 * false 不支持长按操作 */ boolean isLongPressDragEnabled() /** * Item是否支持滑动 * * @return * true 支持滑动操作 * false 不支持滑动操作 */ boolean isItemViewSwipeEnabled() /** * 移动过程中绘制Item * * @param c * @param recyclerView * @param viewHolder * @param dX * X轴移动的距离 * @param dY * Y轴移动的距离 * @param actionState * 当前Item的状态 * @param isCurrentlyActive * 如果当前被用户操作为true,反之为false */ onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)
adapter=new CustomAdapter(getActivity(),strings); recycleview.setAdapter(adapter); ItemTouchHelper.Callback callback=new RecycleItemTouchHelper(adapter); ItemTouchHelper itemTouchHelper=new ItemTouchHelper(callback); itemTouchHelper.attachToRecyclerView(recycleview);
package com.example.xh.adapter;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.util.Log;
import android.view.View;
import com.example.xh.R;
import com.example.xh.utils.MyApplication;
/**
* Created by xiehui on 2017/2/23.
*/
public class RecycleItemTouchHelper extends ItemTouchHelper.Callback{
private static final String TAG ="RecycleItemTouchHelper" ;
private final ItemTouchHelperCallback helperCallback;
public RecycleItemTouchHelper(ItemTouchHelperCallback helperCallback) {
this.helperCallback = helperCallback;
}
/**
* 设置滑动类型标记
*
* @param recyclerView
* @param viewHolder
* @return
* 返回一个整数类型的标识,用于判断Item那种移动行为是允许的
*/
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
Log.e(TAG, "getMovementFlags: " );
//START 右向左 END左向右 LEFT 向左 RIGHT向右 UP向上
//如果某个值传0,表示不触发该操作,次数设置支持上下拖拽,支持向右滑动
return makeMovementFlags(ItemTouchHelper.UP|ItemTouchHelper.DOWN,ItemTouchHelper.END );
}
/**
* Item是否支持长按拖动
*
* @return
* true 支持长按操作
* false 不支持长按操作
*/
@Override
public boolean isLongPressDragEnabled() {
return super.isLongPressDragEnabled();
}
/**
* Item是否支持滑动
*
* @return
* true 支持滑动操作
* false 不支持滑动操作
*/
@Override
public boolean isItemViewSwipeEnabled() {
return super.isItemViewSwipeEnabled();
}
/**
* 拖拽切换Item的回调
*
* @param recyclerView
* @param viewHolder
* @param target
* @return
* 如果Item切换了位置,返回true;反之,返回false
*/
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
Log.e(TAG, "onMove: " );
helperCallback.onMove(viewHolder.getAdapterPosition(),target.getAdapterPosition());
return true;
}
/**
* 滑动Item
*
* @param viewHolder
* @param direction
* Item滑动的方向
*/
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
Log.e(TAG, "onSwiped: ");
helperCallback.onItemDelete(viewHolder.getAdapterPosition());
}
/**
* Item被选中时候回调
*
* @param viewHolder
* @param actionState
* 当前Item的状态
* ItemTouchHelper.ACTION_STATE_IDLE 闲置状态
* ItemTouchHelper.ACTION_STATE_SWIPE 滑动中状态
* ItemTouchHelper#ACTION_STATE_DRAG 拖拽中状态
*/
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
super.onSelectedChanged(viewHolder, actionState);
}
public interface ItemTouchHelperCallback{
void onItemDelete(int positon);
void onMove(int fromPosition,int toPosition);
}
}
@Override
public void onItemDelete(int positon) {
list.remove(positon);
notifyItemRemoved(positon);
}
@Override
public void onMove(int fromPosition, int toPosition) {
Collections.swap(list,fromPosition,toPosition);//交换数据
notifyItemMoved(fromPosition,toPosition);
}
onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive)
/**
* 移动过程中绘制Item
*
* @param c
* @param recyclerView
* @param viewHolder
* @param dX
* X轴移动的距离
* @param dY
* Y轴移动的距离
* @param actionState
* 当前Item的状态
* @param isCurrentlyActive
* 如果当前被用户操作为true,反之为false
*/
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
//滑动时自己实现背景及图片
if (actionState==ItemTouchHelper.ACTION_STATE_SWIPE){
//dX大于0时向右滑动,小于0向左滑动
View itemView=viewHolder.itemView;//获取滑动的view
Resources resources= MyApplication.getAppContext().getResources();
Bitmap bitmap= BitmapFactory.decodeResource(resources, R.drawable.delete);//获取删除指示的背景图片
int padding =10;//图片绘制的padding
int maxDrawWidth=2*padding+bitmap.getWidth();//最大的绘制宽度
Paint paint=new Paint();
paint.setColor(resources.getColor(R.color.btninvalid));
int x=Math.round(Math.abs(dX));
int drawWidth=Math.min(x,maxDrawWidth);//实际的绘制宽度,取实时滑动距离x和最大绘制距离maxDrawWidth最小值
int itemTop=itemView.getBottom()-itemView.getHeight();//绘制的top位置
//向右滑动
if(dX>0){
//根据滑动实时绘制一个背景
c.drawRect(itemView.getLeft(),itemTop,drawWidth,itemView.getBottom(),paint);
//在背景上面绘制图片
if (x>padding){//滑动距离大于padding时开始绘制图片
//指定图片绘制的位置
Rect rect=new Rect();//画图的位置
rect.left=itemView.getLeft()+padding;
rect.top=itemTop+(itemView.getBottom()-itemTop-bitmap.getHeight())/2;//图片居中
int maxRight=rect.left+bitmap.getWidth();
rect.right=Math.min(x,maxRight);
rect.bottom=rect.top+bitmap.getHeight();
//指定图片的绘制区域
Rect rect1=null;
if (x<maxRight){
rect1=new Rect();//不能再外面初始化,否则dx大于画图区域时,删除图片不显示
rect1.left=0;
rect1.top = 0;
rect1.bottom=bitmap.getHeight();
rect1.right=x-padding;
}
c.drawBitmap(bitmap,rect1,rect,paint);
}
//绘制时需调用平移动画,否则滑动看不到反馈
itemView.setTranslationX(dX);
}else {
//如果在getMovementFlags指定了向左滑动(ItemTouchHelper。START)时则绘制工作可参考向右的滑动绘制,也可直接使用下面语句交友系统自己处理
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}else {
//拖动时有系统自己完成
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
float alpha = 1.0f - Math.abs(dX) / (float) itemView.getWidth();
itemView.setAlpha(alpha);
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有