我想制作一个android
用户界面,允许用户通过选择它们然后拖动它们来在屏幕上移动添加的components
/ widgets
。
这是否可以使用标准的android apis?
答案 0 :(得分:6)
是。这取决于你想要实现的目标。
可以使用标准API完成,但此功能不是标准API的一部分。也就是说,除非你写一个方法,否则没有widget.DragOverHere()
方法。
尽管如此,这样做并不是非常复杂。至少,您需要编写View的自定义子类并实现两种方法:onDraw(Canvas c)
和onTouch(MotionEvent e)
。粗略草图:
class MyView extends View {
int x, y; //the x-y coordinates of the icon (top-left corner)
Bitmap bitmap; //the icon you are dragging around
onDraw(Canvas c) {
canvas.drawBitmap(x, y, bitmap);
}
onTouch(MotionEvent e) {
switch(e.getAction()) {
case MotionEvent.ACTION_DOWN:
//maybe use a different bitmap to indicate 'selected'
break;
case MotionEvent.ACTION_MOVE:
x = (int)e.getX();
y = (int)e.getY();
break;
case MotionEvent.ACTION_UP:
//switch back to 'unselected' bitmap
break;
}
invalidate(); //redraw the view
}
}
答案 1 :(得分:0)
在某种程度上。这取决于您希望为用户提供的自由度。想到的一个解决方案是具有预定义单元格的TableLayout。然后,用户可以点击并拖动组件。拖动组件时,您只想在用户的手指下绘制它的图像,但是当它们释放时,从其前一个父项中删除该组件,并使用ViewGroup添加/删除方法将其添加到新父项。
虽然您可以通过编程方式移动视图,但就我所见,我很难/不可能动态切换布局。
答案 2 :(得分:0)
我这样做的方法是使用绝对布局,然后在拖动时更新对象位置。你必须自己实施拖动。如果窗口小部件具有自然顺序(您希望能够在其中拖动按钮的工具栏),则可以在工具栏顶部堆叠绝对布局,并且当拖动开始时,将其添加到绝对布局,并在完成时,您将它添加回新位置的原始布局。