是否可以使用标准的android apis在屏幕上移动组件?

时间:2009-03-31 08:25:03

标签: android user-interface

我想制作一个android用户界面,允许用户通过选择它们然后拖动它们来在屏幕上移动添加的components / widgets

这是否可以使用标准的android apis?

3 个答案:

答案 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)

我这样做的方法是使用绝对布局,然后在拖动时更新对象位置。你必须自己实施拖动。如果窗口小部件具有自然顺序(您希望能够在其中拖动按钮的工具栏),则可以在工具栏顶部堆叠绝对布局,并且当拖动开始时,将其添加到绝对布局,并在完成时,您将它添加回新位置的原始布局。