这个复写ViewGroup ,在ViewGroup里面初始化2个ImageView ,然后捕获onTouch事件。
交换图片的思想是 按住ImageView时候给这个图片重绘上边框,然后拖动开始重绘这个图片在ViewGroup的位置。、

解决方案 »

  1.   


    我基本上也是这个思路的,但是ViewGroup我重来没有用到过,不知道你有木有好点儿的DEMO给我看看
      

  2.   

    需要重写viewgroup,就是重写下layout,重点是ontouch的事件,down的时候判断是否在imageview上面,然后重绘或者显示黄匡,然后movie的时候去layout图片,最后up的时候判断图片是否在另外一张图片上面,交换
      

  3.   


    叨扰了,我现在这样写了一个类:public class ReViewGroup extends LinearLayout {
    private Context con; public ReViewGroup(Context context, AttributeSet attrs) {
    super(context, attrs);
    this.con = context;
    this.setOnTouchListener(new OnTouchListener() { @Override
    public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
    if (v instanceof ImageView) {//这里改成LinearLayout就能弹出提示框
    Toast.makeText(con, "选中了ImageView", 1000).show();
    }
    break;
    }
    return true;
    }
    });
    }
    }我想问一下你说的down的时候判断是否在imageview上面应该怎么做啊??
      

  4.   

     @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;
        }
      

  5.   

    最近写的demo,重点是这个dragPosition,是为View。.INVALID_POSITION
      

  6.   


    谢谢啦!我看起你的DEMO太费力了,老板说让我弄其他的喽