Android用户界面有bitmaps问题

时间:2011-02-17 20:01:07

标签: android user-interface layout custom-view

我有一个Ball类扩展View.Inside那里我给出一些特性并实现onTouchEvent()所以我可以处理运动。我也使用onDraw所以我可以绘制球的位图。在我的活动类中,我创建了一个新的布局,我将视图添加到它,以便可以显示它。一切正常,除非当我尝试在我的布局中添加更多的球时,它们不会出现!总是首先添加在布局球中! 这是活动类的onCreate代码:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    LinearLayout ll = new LinearLayout(this);
    ll.setOrientation(LinearLayout.HORIZONTAL);
    int lHeight = LinearLayout.LayoutParams.WRAP_CONTENT;
    int lWidth = LinearLayout.LayoutParams.WRAP_CONTENT;

    Point point1 = new Point();
    point1.x = 50;
    point1.y = 20;
    Point point2 = new Point();
    point2.x = 100;
    point2.y = 20;
    Point point3 = new Point();
    point3.x = 150;
    point3.y = 20;

    ColorBall ball1 = new ColorBall(this,R.drawable.bol_groen, point1);
    ll.addView(ball1, new LinearLayout.LayoutParams(lHeight, lWidth));
    setContentView(ll);

    ColorBall ball2 = new ColorBall(this,R.drawable.bol_rood, point2);
    ll.addView(ball2, new LinearLayout.LayoutParams(lHeight, lWidth));
    setContentView(ll);

    ColorBall ball3 = new ColorBall(this,R.drawable.bol_blauw, point3);

    ll.addView(ball3, new LinearLayout.LayoutParams(lHeight, lWidth));
    setContentView(ll);        

}

可能是什么问题?我也尝试了最后只有一个setContentView()。我在想我不能使用布局,所以我可以绘制自定义视图中的位图!我是对? 我应该更改我的代码并创建一个View并在里面创建一个包含我想要显示的所有球的数组,然后将此View设置为从我的主要活动类中显示?(就像这个setContentView(customview))。

1 个答案:

答案 0 :(得分:0)

您正在多次调用setContentView,而每次活动初始化时只需调用一次。

<强>更新

您可以使用此布局xml而不是您使用的编程方式吗?这只是为了100%确定你要添加ColorBalls的容器是好的。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:id="@+id/container"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" />

以防万一,以下是将其包含在活动中的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.your_name_of_layout);

    LinearLayout container = (LinearLayout) findViewById(R.id.container);
    ..
    container.addView(ball1);
    container.addView(ball2);
    ..
}