我在 View 组内拖动/移动 View 时遇到问题。
在我的根 Activity 中,我有一个线性布局,它添加了两个自定义 View - PaintAreaView 和 PaletteView。在我的 PaletteView 类(它扩展了 ViewGroup)中,我添加了几个第三个 View PaintView。 PaletteView 以自定义布局排列 PaintView。我需要能够在 PaletteView 周围拖动 PaintViews,但我无法利用我在我的应用程序中成功找到的任何拖动或移动教程。我对这一切都很陌生,所以也许我缺少一些基本的东西。这感觉很简单,所以我想我遗漏了一些非常明显的东西,但我们非常欢迎任何帮助!
目前我正在尝试通过 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;
}
我尝试过的一切都失败了,所以作为基础,我从一个教程中借用了它,该教程在移动单个 View 时效果很好。但即使它对我不起作用。发布所有代码会太多,但是如果任何其他代码有帮助,请告诉我。
这是错误的做法吗?我是否应该尝试通过添加 PaintView 的 PaletteView 来实现可移动性,而不是在 PaintView 本身(技术上我已经尝试过)?在 PaletteView 中使用自定义布局可能会导致问题吗?任何反馈将不胜感激。
最佳答案
您应该将拖动监听器添加到您想要四处移动的单个 View (例如:绘画 View )。我不确定您面临的确切问题。最好能展示一下拖拽效果的结果,看看问题出在哪里
拖放来源:http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html
关于android - 如何在 View 组 (android) 中移动 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26965258/