android的拖拽移动,比较简单
1、在xml中创建一个view
2、在activity中通过findViewById获取该view的对象(Button btn=findViewById())
3、为该view注册OnTouchListener监听view.setOnTouchListener
@Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { ClipData data = ClipData.newPlainText("", ""); View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); v.startDrag(data, shadowBuilder, v, 0); v.setVisibility(View.VISIBLE);//如果想在移动时对view做其他处理可以设置其他值 这里的效果是移动时改view还是可见的 width = v.getWidth();//view的宽 height = v.getHeight();//view的高 return true; } else { return false; } }4、获取该view的父布局(这里是relativelayout都无所谓)的对象view_parent
5、为view_parent注册onDragListener
@Override public boolean onDrag(View v, DragEvent event) { int action = event.getAction(); switch (action) { case DragEvent.ACTION_DRAG_STARTED: break; case DragEvent.ACTION_DRAG_ENTERED: break; case DragEvent.ACTION_DRAG_EXITED: break; case DragEvent.ACTION_DROP://移动->手指松开
Button view = (ImageView) event.getLocalState();//获取移动后的view对象
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
layoutParams.setMargins((int) event.getX() - width / 2, (int) event.getY() - height / 2, 0, 0); view.setLayoutParams(layoutParams);//设置view的布局参数 ViewGroup owner = (ViewGroup) view.getParent(); owner.removeView(view);//清楚该view在移动前的对象 不remove会抛异常 RelativeLayout container = (RelativeLayout) v;//父布局 container.addView(view);//向父布局中添加移动后的view view.setVisibility(View.VISIBLE); break; case DragEvent.ACTION_DRAG_ENDED: break; default: break; } return true; }
6、快去试试吧