当前位置: 代码迷 >> Android >> 通过长按和拖动来交换两个ImageView中的位图?怎么实现,求DEMO
  详细解决方案

通过长按和拖动来交换两个ImageView中的位图?怎么实现,求DEMO

热度:46   发布时间:2016-04-28 03:47:43.0
通过长按和拖动来交换两个ImageView中的位图??如何实现,求DEMO
直接上图说明:

    

                                                                               图一

 

                                                                                图二
     


                                                                           图三    
   

图一所示,空调在左,风扇在右。再如图二,通过长按右图即风扇这张图,会显示出一个黄色提示框,然后手指始终不离开手机屏幕,移动该黄色提示框到左侧。即会产生如图三的效果,这时空调在右,风扇在左   

跪求做过类似效果的朋友给个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
  相关解决方案