如何将类扩展视图添加到当前类视图

时间:2011-12-05 14:49:12

标签: android

我有一个类Drawview:

public class DrawView extends View {
   private ColorBall[] colorballs = new ColorBall[3]; // array that holds the balls
   private int balID = 0; // variable to know what ball is being dragged

    public DrawView(Context context) {
        super(context);
        setFocusable(true); //necessary for getting the touch events

        // setting the start point for the balls
        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;


        // declare each ball with the ColorBall class
        colorballs[0] = new ColorBall(context,R.drawable.bol_groen, point1);
        colorballs[1] = new ColorBall(context,R.drawable.bol_rood, point2);
        colorballs[2] = new ColorBall(context,R.drawable.bol_blauw, point3);


    }
    }

我目前的课程是:

public class Quiz1 extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.e);
AbsoluteLayout l= (AbsoluteLayout)findViewById(R.id.ll);
DrawView d=new DrawView(this);
l.addView(d);
}
}

我正在尝试添加DrawView类,但它没有被添加为我当前类view的Absolutelayout的子视图。执行没有任何错误但我无法看到Drawview类对象。 当我这样做时:

 public class Quiz1 extends Activity{

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.e);
    AbsoluteLayout l= (AbsoluteLayout)findViewById(R.id.ll);
    DrawView d=new DrawView(this);
    l.addView(d);
    }
    }

我得到的是NullPointerException,这意味着它没有渲染Drawview View.So底线是如何添加一个将View扩展到当前视图的类。 请帮帮我..谢谢

1 个答案:

答案 0 :(得分:0)

视图可能 被添加,但是从您发布的代码中,它不会以任何可见的方式布局。默认情况下,当您使用Java代码向布局添加视图时,如果没有明确设置任何LayoutParams,它将使用wrap_content为高度和宽度设置视图。因为(据我们所见),您没有覆盖任何View的测量方法来告诉布局系统自定义视图中的“内容”有多大,视图将被添加到层次结构中,高度和宽度为零

在将自定义视图添加到布局之前,您应该添加一行来设置布局参数以填充它的容器(父布局),如下所示:

AbsoluteLayout l= (AbsoluteLayout)findViewById(R.id.ll);
DrawView d = new DrawView(this);
LayoutParams lp = new AbsoluteLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0, 0);
d.setLayoutParams(lp);
l.addView(d);

另一种选择是将您的自定义视图直接添加到XML布局R.layout.e,您可以在其中直接在XML中设置所有这些参数,而不必担心在Java代码中执行此操作。

最后的注意事项:AbsoluteLayout已经被弃用了很长时间,不应该在新的应用程序中使用。您应该为您的应用程序使用FrameLayoutRelativeLayout,这提供了同样多的灵活性。

HTH