如何从活动中动态添加视图组件

时间:2011-12-06 13:49:53

标签: android android-ui android-canvas

我正在尝试动态创建用户界面。我已经成功创建了一个视图并加载了我的背景图像。我创建了两个额外的小视图项目以在后台显示。我的问题是我找不到任何告诉我如何绘制小视图的建议/指示。它似乎应该是一个微不足道的练习,我猜它只是找到正确的引用。希望有人可以指出我正确的方向。

这是我的活动:

public class GhostActivity extends Activity implements OnTouchListener
{
private DrawView ghostView;
public Card mCard1, mCard2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    // ToDo add your GUI initialization code here        
    super.onCreate(savedInstanceState);
    // requesting to turn the title OFF
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    // making it full screen
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);
    ghostView = new DrawView(this);
    setContentView(ghostView);

    //get the window size
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

    Context context = getApplicationContext();
    //create view items with initial positions
    Point startPoint;
    startPoint = new Point();
    startPoint.x = 5;
    startPoint.y = 3;
    mCard1 = new Card(context, 1, R.drawable.bol_geel, startPoint);
    startPoint.x = 5;
    startPoint.y = 43;
    mCard2 = new Card(context, 2, R.drawable.bol_rood, startPoint);

    //now display them on the ghostView *****************HOW?

    // set the callbacks
    ghostView.setOnTouchListener(this);
    mCard1.setOnTouchListener(this);
    mCard2.setOnTouchListener(this);

    }

这是View;

public class DrawView extends View 
{
Drawable bg ; 
public DrawView(Context context) {
   super(context);
   //setFocusable(true); 
   Drawable bg = this.getResources().getDrawable(R.drawable.bubbleblue480x800);
   setBackgroundDrawable(bg);
   }


@Override protected void onDraw(Canvas canvas) {
//   canvas.drawColor(0x0000000);     //if you want another background color       

    //draw  on the canvas
  }
}

编辑:我相信我的问题是需要传递一个指向ghostView画布的指针。是什么让我觉得如果我在ghostView中创建子项然后调用他们的.draw方法,它们看起来完全像我期望的那样。

@Override protected void onDraw(Canvas canvas) {
    canvas.drawColor(0x0000000);     //if you want another background color       

    //draw the cards on the canvas
    mCard1.draw(canvas);
    mCard2.draw(canvas);
}

所以在这一点上我想知道如何获得一个指向ghostView画布的引用指针。 说实话,我发现整个活动 - 视图关系令人困惑。

编辑:我在本教程的基础上采用了不同的方法 http://www.kellbot.com/2009/06/android-hello-circle/ 它使用FrameLayout,似乎我可以实现我的目标。

2 个答案:

答案 0 :(得分:0)

要动态添加视图以查看您的类必须从ViewGroup或LinearLayout类扩展,那么您将能够调用方法addView。

答案 1 :(得分:0)

在幽灵视图中首先添加一个布局,例如线性或相对。然后,只有您能够在该布局中添加视图,而您只能将视图添加到xml文件中。

或者您可以创建动态布局,然后只能在该布局中添加视图。

RelativeLayout relative= new RelativeLayout(findViewById(R.id.your relativeLayoutID));
    relative.addView(child);

child可以是任何按钮textview和widget。