通过长按和拖动来交换两个ImageView中的位图??如何实现,求DEMO 这个复写ViewGroup ,在ViewGroup里面初始化2个ImageView ,然后捕获onTouch事件。交换图片的思想是 按住ImageView时候给这个图片重绘上边框,然后拖动开始重绘这个图片在ViewGroup的位置。、 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我基本上也是这个思路的,但是ViewGroup我重来没有用到过,不知道你有木有好点儿的DEMO给我看看 需要重写viewgroup,就是重写下layout,重点是ontouch的事件,down的时候判断是否在imageview上面,然后重绘或者显示黄匡,然后movie的时候去layout图片,最后up的时候判断图片是否在另外一张图片上面,交换 叨扰了,我现在这样写了一个类: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上面应该怎么做啊?? @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 谢谢啦!我看起你的DEMO太费力了,老板说让我弄其他的喽 有没直接调处剪贴板的代码额 android google 地图定位,在线等 不能在SD卡中创建文件 android应用发AT命令的问题 谁能做个简单的示例给我 eclipse安装ADT报错,如何解决? 安卓如何调用C#的Hessian接口 android 分享功能中如何去除不必要的分享程序 如360助手这些等等 关于sipServlet 求问安卓开发中,若用户主动摧毁了一个activity,如何保存其状态 [求助]android使用sharesdk进行第三方sso新浪微博登陆 求助封装jar ,怎么让别人调用
我基本上也是这个思路的,但是ViewGroup我重来没有用到过,不知道你有木有好点儿的DEMO给我看看
叨扰了,我现在这样写了一个类: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上面应该怎么做啊??
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太费力了,老板说让我弄其他的喽