Java 通过addView()显示两个视图对象
我写了下面的代码。但是它只能显示textView对象,不能显示draw对象。问题是什么 MainActivity.javaJava 通过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
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);
}}