android ListView和GridView拖拽移位具体实现及拓展

来源:互联网 发布:mmd镜头数据下载 编辑:程序博客网 时间:2024/05/16 06:15

/*** * touch事件拦截  */@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {// 按下if (ev.getAction() == MotionEvent.ACTION_DOWN) {int x = (int) ev.getX();// 获取相对与ListView的x坐标int y = (int) ev.getY();// 获取相应与ListView的y坐标dragSrcPosition = dragPosition = pointToPosition(x, y);// 无效不进行处理if (dragPosition == AdapterView.INVALID_POSITION) {return super.onInterceptTouchEvent(ev);}// 获取当前位置的视图(可见状态)ViewGroup itemView = (ViewGroup) getChildAt(dragPosition- getFirstVisiblePosition());// 获取到的dragPoint其实就是在你点击指定item项中的高度.dragPoint = y - itemView.getTop();// 这个值是固定的:其实就是ListView这个控件与屏幕最顶部的距离(一般为标题栏+状态栏).dragOffset = (int) (ev.getRawY() - y);// 获取可拖拽的图标View dragger = itemView.findViewById(R.id.iv_drag_list_item_2);// x > dragger.getLeft() - 20这句话为了更好的触摸(-20可以省略)if (dragger != null && x > dragger.getLeft() - 20) {upScrollBounce = getHeight() / 3;// 取得向上滚动的边际,大概为该控件的1/3downScrollBounce = getHeight() * 2 / 3;// 取得向下滚动的边际,大概为该控件的2/3itemView.setDrawingCacheEnabled(true);// 开启cache.Bitmap bm = Bitmap.createBitmap(itemView.getDrawingCache());// 根据cache创建一个新的bitmap对象.startDrag(bm, y);// 初始化影像}// return false;}return super.onInterceptTouchEvent(ev);}

<pre na…………………………………………………………………………

原作者:http://www.verydemo.com/demo_c131_i55830.html

0 0
原创粉丝点击