Java 通过addView()显示两个视图对象

Java 通过addView()显示两个视图对象,java,android,Java,Android,我写了下面的代码。但是它只能显示textView对象,不能显示draw对象。问题是什么 MainActivity.java public class MainActivity extends Activity { Draw draw; Cal cal; TextView textView; RelativeLayout linearLayout; Canvas canvas; Paint paint; public void onCreate(Bundl

我写了下面的代码。但是它只能显示textView对象,不能显示draw对象。问题是什么

MainActivity.java

public class MainActivity extends Activity {
    Draw draw;
    Cal cal;
    TextView textView;
    RelativeLayout linearLayout;
Canvas canvas;
 Paint paint;
    public void onCreate(Bundle s) {
        super.onCreate(s);
        setContentView(R.layout.activity_main);

        linearLayout = (RelativeLayout) findViewById(R.id.t);
        cal = new Cal(this);
        cal.cal();

        textView = new TextView(getApplicationContext());
        textView.setText("" + cal.result);
        textView.setTextColor(Color.RED);

        draw = new Draw(this);
canvas = new Canvas();
        paint = new Paint();
        draw.d(canvas, paint);
        linearLayout.addView(draw);
        linearLayout.addView(textView);
    }}
public class Draw extends View {

public Draw(Context context) {
    super(context);
}
public void d(Canvas canvas, Paint paint) {

    paint.setColor(Color.BLUE);
    canvas.drawCircle(120,120,40,paint);
    }
}
public class Cal extends View {
   public Cal(Context context){
        super(context);
    }
    public double result;
    double parameter = (Math.pow(40,2)) * 3.14;
    public void cal(){
        result = Math.sqrt(parameter);

    }
}
Draw.java

public class MainActivity extends Activity {
    Draw draw;
    Cal cal;
    TextView textView;
    RelativeLayout linearLayout;
Canvas canvas;
 Paint paint;
    public void onCreate(Bundle s) {
        super.onCreate(s);
        setContentView(R.layout.activity_main);

        linearLayout = (RelativeLayout) findViewById(R.id.t);
        cal = new Cal(this);
        cal.cal();

        textView = new TextView(getApplicationContext());
        textView.setText("" + cal.result);
        textView.setTextColor(Color.RED);

        draw = new Draw(this);
canvas = new Canvas();
        paint = new Paint();
        draw.d(canvas, paint);
        linearLayout.addView(draw);
        linearLayout.addView(textView);
    }}
public class Draw extends View {

public Draw(Context context) {
    super(context);
}
public void d(Canvas canvas, Paint paint) {

    paint.setColor(Color.BLUE);
    canvas.drawCircle(120,120,40,paint);
    }
}
public class Cal extends View {
   public Cal(Context context){
        super(context);
    }
    public double result;
    double parameter = (Math.pow(40,2)) * 3.14;
    public void cal(){
        result = Math.sqrt(parameter);

    }
}
Cal.java

public class MainActivity extends Activity {
    Draw draw;
    Cal cal;
    TextView textView;
    RelativeLayout linearLayout;
Canvas canvas;
 Paint paint;
    public void onCreate(Bundle s) {
        super.onCreate(s);
        setContentView(R.layout.activity_main);

        linearLayout = (RelativeLayout) findViewById(R.id.t);
        cal = new Cal(this);
        cal.cal();

        textView = new TextView(getApplicationContext());
        textView.setText("" + cal.result);
        textView.setTextColor(Color.RED);

        draw = new Draw(this);
canvas = new Canvas();
        paint = new Paint();
        draw.d(canvas, paint);
        linearLayout.addView(draw);
        linearLayout.addView(textView);
    }}
public class Draw extends View {

public Draw(Context context) {
    super(context);
}
public void d(Canvas canvas, Paint paint) {

    paint.setColor(Color.BLUE);
    canvas.drawCircle(120,120,40,paint);
    }
}
public class Cal extends View {
   public Cal(Context context){
        super(context);
    }
    public double result;
    double parameter = (Math.pow(40,2)) * 3.14;
    public void cal(){
        result = Math.sqrt(parameter);

    }
}

问题出在哪里?

检查活动主布局文件。设置linearlayout的宽度和高度以匹配父项。并将方向设置为垂直。

将布局R.id.t从
相对布局更改为
线性布局
您需要使用索引添加视图,如

linearLayout.addView(draw,0);
        linearLayout.addView(textView,1);

您应该在系统提供的画布上绘制
View.onDraw()
,而不是创建自己的画布


此外,还应为“绘制”视图设置适当的尺寸。默认情况下,它的大小为零。

您必须设置自定义视图的高度和宽度。而且您绘制自定义视图的方式也不正确。

我已经更新了你的类,你可以运行和测试它们

public class MainActivity extends Activity {

Draw draw;
Cal cal;
TextView textView;
RelativeLayout linearLayout;
Canvas canvas;
Paint paint;

public void onCreate(Bundle s) {
    super.onCreate(s);
    setContentView(R.layout.activity_main);

    linearLayout = (RelativeLayout) findViewById(R.id.t);
    cal = new Cal(this);
    cal.cal();

    textView = new TextView(getApplicationContext());
    textView.setText("" + cal.result);
    textView.setTextColor(Color.RED);

    draw = new Draw(this);

    LayoutParams layoutParams = new LayoutParams(200, 200);
    draw.setLayoutParams(layoutParams);

    linearLayout.addView(draw);
    linearLayout.addView(textView);
}}

public class Draw extends View {
Paint paint;

public Draw(Context context) {
    super(context);
    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
}

@Override
protected void onDraw(Canvas canvas) {
    paint.setColor(Color.BLUE);
    canvas.drawCircle(120, 120, 40, paint);
    super.onDraw(canvas);
}}