我有一个类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扩展到当前视图的类。 请帮帮我..谢谢
答案 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
已经被弃用了很长时间,不应该在新的应用程序中使用。您应该为您的应用程序使用FrameLayout
或RelativeLayout
,这提供了同样多的灵活性。
HTH