直接上图说明:
图一
图二
图三
如图一所示,空调在左,风扇在右。再如图二,通过长按右图即风扇这张图,会显示出一个黄色提示框,然后手指始终不离开手机屏幕,移动该黄色提示框到左侧。即会产生如图三的效果,这时空调在右,风扇在左。
跪求做过类似效果的朋友给个DEMO,没做过的给点思路。(最好是DEMO,本人初学android,感激涕零)
------解决思路----------------------
这个复写ViewGroup ,在ViewGroup里面初始化2个ImageView ,然后捕获onTouch事件。
交换图片的思想是 按住ImageView时候给这个图片重绘上边框,然后拖动开始重绘这个图片在ViewGroup的位置。、
------解决思路----------------------
需要重写viewgroup,就是重写下layout,重点是ontouch的事件,down的时候判断是否在imageview上面,然后重绘或者显示黄匡,然后movie的时候去layout图片,最后up的时候判断图片是否在另外一张图片上面,交换
------解决思路----------------------
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
int x = (int) ev.getX();
int y = (int) ev.getY();
dragPosition = pointToPosition(x, y);// 判断当前xy值
// 是否在item上
// 如果在
// 返回改item的position
// 否则 返回
// INVALID_POSITION(-1)
if (dragPosition == AdapterView.INVALID_POSITION) {
return super.onInterceptTouchEvent(ev);
}
savePosition = dragPosition;
movePosition = dragPosition;
moveitem = mSelectAdapter.getItem(dragPosition);
itemView = (ViewGroup) getChildAt(dragPosition - getFirstVisiblePosition());// 获取当前点击的view
dragPoint = y - itemView.getTop();// 点击坐标-view的上边界
dragOffset = (int) (ev.getRawY() - y);// 整个屏幕中的y坐标-listview中的y坐标,即偏移量
View dragger = itemView.findViewById(R.id.move_item);
if (dragger != null && x > dragger.getLeft() && x < dragger.getRight()) {
itemView.setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(itemView.getDrawingCache());
mSelectAdapter.remove(moveitem);
mSelectAdapter.insert(mReplaceString, dragPosition);
startDrag(bm, y);
return true;
} else {
return false;
}
}
return false;
}
------解决思路----------------------
最近写的demo,重点是这个dragPosition,是为View。.INVALID_POSITION