欢迎光临
我们一直在努力

flag是什么泵自定义ListView实现拖拽ListItem项交换位置(附源码)


package com.example.draglistview;
import com.example.draglistview.MainActivity.DragListAdapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PixelFormat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
public class DragView extends ListView
//重写于absListView
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)

/***
* 锁定手指touch的列表item,
* 参数为屏幕的touch坐标减去listview左上角的坐标
* 这里的getChildAt方法参数为相对于组件左上角坐标为00的情况
* 故有下面的这种参数算法
*/
ViewGroup itemView = (ViewGroup) this.getChildAt(dragPosition-this.getFirstVisiblePosition());
/****
* 说明:getX Y为touch点相对于组件左上角的距离
* getRawX 、Y 为touch点相对于屏幕左上角的距离
* 参考http://blog.csdn.net/love_world_/article/details/8164293
*/
//touch点的view相对于该childitem的top坐标的距离
dragPoint = y-itemView.getTop();
//为距离屏幕左上角的Y减去距离组件左上角的Y,其实就是
//组件上方的view+标题栏+状态栏的Y
dragOffset = (int) (ev.getRawY()-y);

//拿到拖动的imageview对象
View drager = itemView.findViewById(R.id.imageView1);

//判断条件为拖动touch图片是否为null和touch的位置,是否符合
if(drager != null && x>drager.getLeft()-20)
return false;
}
return super.onInterceptTouchEvent(ev);
}


//重写OnTouchEvent,触摸事件
@Override
public boolean onTouchEvent(MotionEvent ev)
return true;
}
//决定了选中的效果
return super.onTouchEvent(ev);
}

/****
* 准备拖动,初始化拖动时的影像,和一些window参数
* @param bm 拖动缓存位图
* @param y 拖动之前touch的位置
*/
public void startDrag(Bitmap bm,int y)

/***
* 停止拖动,去掉拖动时候的影像
*/
public void stopDrag()
}


/****
* 拖动方法
* @param y
*/
public void onDrag(int y)


//避免拖动到分割线返回-1
int tempPosition = this.pointToPosition(0, y);
if(tempPosition != this.INVALID_POSITION){
this.dragPosition = tempPosition;
}


int scrollHeight = 0;
if(y<upScrollBounce){
scrollHeight = 8;//定义向上滚动8个像素,如果可以向上滚动的话
}else if(y>downScrollBounce){
scrollHeight = -8;//定义向下滚动8个像素,,如果可以向上滚动的话
}

if(scrollHeight!=0)
}


/***
* 拖动放下的时候
* param : y
*/
public void onDrop(int y)

//超出边界处理
if(y<getChildAt(1).getTop()){
//超出上边界
dragPosition = 1;
}else if(y>getChildAt(getChildCount()-1).getBottom())
//数据交换
if(dragPosition>0&&dragPosition<getAdapter().getCount())
}
}

赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » flag是什么泵自定义ListView实现拖拽ListItem项交换位置(附源码)

登录

找回密码

注册