我在视图组中拖动/移动视图时遇到问题。
在我的根Activity中,我有一个线性布局,添加了两个自定义视图--PaintAreaView和PaletteView。在我的PaletteView类(扩展ViewGroup)中,我添加了几个第三个视图,PaintView。 PaletteView以自定义布局排列PaintView。我需要能够在PaletteView周围拖动PaintViews,但是我无法利用我在App上成功找到的任何拖动或移动教程。我对这一切都很陌生,所以也许我缺少一些基本的东西。感觉就像这么简单,所以我想我错过了一些非常明显的东西,但是非常欢迎任何帮助!
目前我正在尝试通过PaintView类实现可移动性,如下所示:
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
final int action = event.getAction();
switch (action & MotionEvent.ACTION_MASK)
{
case MotionEvent.ACTION_DOWN:
{
mLastTouchX = x;
mLastTouchY = y;
// Save the ID of this pointer
mActivePointerId = event.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE:
{
final int pointerIndex = event.findPointerIndex(mActivePointerId);
x = event.getX(pointerIndex);
y = event.getY(pointerIndex);
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
mLastTouchX = x;
mLastTouchY = y;
invalidate();
break;
}
case MotionEvent.ACTION_UP:
{
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL:
{
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP:
{
final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = event.getPointerId(pointerIndex);
if (pointerId == mActivePointerId)
{
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = event.getX(newPointerIndex);
mLastTouchY = event.getY(newPointerIndex);
mActivePointerId = event.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
我尝试过的所有内容都失败了,所以作为一个基础,我从一个在移动单个视图时工作得很好的教程中借用了它。但即使它对我不起作用。发布所有代码会太多,但如果有任何其他代码会有帮助,请告诉我。
这是错误的方法吗?我是否应该尝试通过PaletteView实现可移动性,其中添加了PaintViews而不是PaintView本身(我在技术上已尝试过)?它是否可能是由PaletteView中的自定义布局引起的问题?任何反馈将不胜感激。
答案 0 :(得分:2)
您应该将拖动侦听器添加到要移动的单个视图中(例如:paintviews)。我不确定你面临的确切问题。最好显示拖动效果的结果,看看问题出在哪里
拖放来源:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html