在一个绝对布局的activity里面,有很多张ImageView,他们的位置是随机的,可能会重叠,怎么拖动每一张图片?
这是我的代码LayoutParams lp = lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0, 0);
ScrollView sv = sv = (ScrollView) views.get(0).findViewById(R.id.home_scrollview);
View selectImg;
ImageView iv1 = (ImageView) view.findViewById(R.id.iv1);
ImageView iv2 = (ImageView) view.findViewById(R.id.iv2);
ImageView iv3 = (ImageView) view.findViewById(R.id.iv3);
ImageView iv4 = (ImageView) view.findViewById(R.id.iv4);
List<ImageView> ivs = new ArrayList<ImageView>();
ivs.add(iv1);
ivs.add(iv2);
ivs.add(iv3);
ivs.add(iv4);
for (int i = 0; i < ivs.size(); i++)
{
ivs.get(i).setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view2, MotionEvent e)
{
if (e.getAction() == MotionEvent.ACTION_DOWN)
{
selectImg = view2;
offsetX = (int) e.getX();
offsetY = (int) e.getY();
}
return false;
}
});
}
view.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view2, MotionEvent e)
{
if (selectImg != null)
{
if (e.getAction() == MotionEvent.ACTION_MOVE)
{
lp.x = (int) e.getX() - offsetX;
lp.y = (int) e.getY() - offsetY +sv.getScrollY();
selectImg.setLayoutParams(lp);
}
else if (e.getAction() == MotionEvent.ACTION_UP)
{
selectImg = null;
}
return true;
}
else
{
return false;
}
}
});运行结果,是一拖动图片,全部图片叠成一张,一起移动,有没有什么办法,可以让没张图片自己移动?
还是有什么别的方法,请各位大侠赐教!!!!

解决方案 »

  1.   

     view.setOnTouchListener(new OnTouchListener()是view的么??我觉得应该是ImageView iv2的吧?
      

  2.   

    先问一下:你是想实现拖动图片来做一些事情吗?(比如改变位置,交换顺序等)
    如果是这样的话,其实就是drag drop,对吧。实现这个功能不是很难的。
    我可以说下大概思路:
    1,定义出相应的接口,IDropTarget, IDragSource, IDataObject,等等。
    2,实现一个Drag controller,把从activity或root view的事件传给drag controller,由它去发起drag,这里面需要实现:a)查找 drag source,b)调用drag source的相应方法,c)把drag enter, drag level等事件传给drop target
    3, 你的imageview去实现IDragSource,因为它是一个拖拽源。
    4, 要接收imageview 的去实现IDropTarget。
    5,规定好drag source与drop target之间要传递的数据。
      

  3.   

    不光光是要改变LayoutParams 还要重新Layout一下你的View