自定义可拖拽的GridView
来源:互联网 发布:车辆损失险算法 编辑:程序博客网 时间:2024/04/28 01:25
转转请注明出处 http://blog.csdn.net/u011510784/article/details/51524900
自定义可拖拽的GridView,如图:
自定义可以拖拽的Gridview,继承 Gridview:
public class DraggableGridView extends GridView {public DraggableGridView(Context context) {super(context);this.mContext = context;}public DraggableGridView(Context context, AttributeSet attrs) {super(context, attrs);this.mContext = context;}}
@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) {// 拦截按下动作if (ev.getAction() == MotionEvent.ACTION_DOWN) {return setOnItemLongClickListener(ev);}return super.onInterceptTouchEvent(ev);}
处理长按时间:
public boolean setOnItemLongClickListener(final MotionEvent ev) {this.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 。。。return false;};});return super.onInterceptTouchEvent(ev);}
这里主要操作是记录长按的位置,并将长按的那个ItemView悬浮显示,主要代码:
int offset=5;ViewGroup itemView = (ViewGroup) getChildAt(dragPosition- getFirstVisiblePosition());itemView.destroyDrawingCache();itemView.setDrawingCacheEnabled(true);itemView.setDrawingCacheBackgroundColor(0xff6DB7ED);Bitmap bm = Bitmap.createBitmap(itemView.getDrawingCache(true));Bitmap bitmap = Bitmap.createBitmap(bm, 0, 0,bm.getWidth() - offset, bm.getHeight() - offset);startDrag(bitmap, x, y);
private void startDrag(Bitmap bm, int x, int y) {stopDrag();windowParams = new WindowManager.LayoutParams();windowParams.gravity = Gravity.TOP | Gravity.LEFT;windowParams.x = dragItemView.getLeft();windowParams.y = dragItemView.getTop()+ (int) (45 * Configure.screenDensity);windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;windowParams.alpha = 0.8f;ImageView iv = new ImageView(getContext());iv.setImageBitmap(bm);windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);// 把影像ImagView添加到当前视图中windowManager.addView(iv, windowParams);dragImageView = iv;}
然后监听滑动事件,并相应的显示移动的动画效果,然后在手指抬起时结束整个过程,刷新布局:
@Overridepublic boolean onTouchEvent(MotionEvent ev) {if (dragImageView != null&& dragPosition != AdapterView.INVALID_POSITION) {// 控制父控件拦截事件getParent().requestDisallowInterceptTouchEvent(true);int x = (int) ev.getX();int y = (int) ev.getY();switch (ev.getAction()) {case MotionEvent.ACTION_MOVE:if (!isCountXY) {// 移动到哪个位置xtox = x - mLastX;ytoy = y - mLastY;isCountXY = true;}onDrag(x, y);if (!isMoving)onMove(x, y);break;case MotionEvent.ACTION_UP:stopDrag();onDrop(x, y);break;}}return super.onTouchEvent(ev);}
onDrag()方法用来根据手指的滑动来动态滑动我们在上面新建的那个ItemView:
private void onDrag(int x, int y) {// 计算位置,通过windowManager不停地更新Viewif (dragImageView != null) {windowParams.alpha = 0.8f;windowParams.x = (x - mLastX - xtox) + dragItemView.getLeft();windowParams.y = (y - mLastY - ytoy) + dragItemView.getTop() + 200+ (int) (45 * Configure.screenDensity);windowManager.updateViewLayout(dragImageView, windowParams);}}
onMove()方法用来根据手指滑动来动态滑动Gridview中的item,并且通过OnDragChangedListener接口通知Adapter进行相应的数据刷新。
更具体的代码实现请看源码:
源码下载
0 0
- 自定义可拖拽的GridView
- 自定义Gridview的表头
- 自定义gridview的问题
- 自定义的GridView的使用
- 简单的GridView自定义分页
- 自定义GridView的分页功能
- 如何自定义GridView的元素
- 加入header的自定义GridView
- 带有Header的自定义GridView
- 自定义瓷砖效果的GridView
- GridView的自定义布局载入
- 自定义GridView的表格样式
- 【GridView自定义】自定义没有滚动条的GridView
- 自定义GridView
- 自定义gridview
- 自定义gridview
- 自定义GridView
- 自定义GridView
- 修改environment后,ubuntu无法正常登陆
- hdu 5690 All X(快速幂)
- JSP使用get方法提交表单或者超链接传递参数时候中文乱码的解决方法
- App Store 审核指南最新中英文参照版
- iOS中QQ登录界面的制作,登录页面和注册页面的切换
- 自定义可拖拽的GridView
- Java序列化Serializable
- thinkphp自定义标签
- MO_GLOBAL包中一些过程和函数的使用(转)
- 第1章 学会提出问题
- 集列的上限集和下限集
- 常量成员函数(const)
- Okhttp----缓存的加入方式----附完整demo
- JavaScript 函数中的值传递