Java 在布局上绘制画布,而不隐藏UI上的元素

Java 在布局上绘制画布,而不隐藏UI上的元素,java,android,canvas,view,draw,Java,Android,Canvas,View,Draw,我使用下面的方法在布局上绘制一些东西,效果很好,矩形显示出来,但UI上的所有其他内容都不可见,即使画布不在UI元素上 我找不到任何类似问题的解决方案,所以我来问你们 我怀疑这是与setContentView(myview)有关的,它非常简单,但我被绊住了 这是我的密码: // MyView.java public class MyView extends View { Paint paint; Path path; public MyView(Context context) { su

我使用下面的方法在布局上绘制一些东西,效果很好,矩形显示出来,但UI上的所有其他内容都不可见,即使画布不在UI元素上

我找不到任何类似问题的解决方案,所以我来问你们

我怀疑这是与
setContentView(myview)
有关的,它非常简单,但我被绊住了

这是我的密码:

// MyView.java
public class MyView extends View {
Paint paint;
Path path;

public MyView(Context context) {
    super(context);
}
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint = new Paint();
    paint.setColor(Color.MAGENTA);
    paint.setStrokeWidth(10);
    paint.setStyle(Paint.Style.FILL_AND_STROKE);
    canvas.drawRect(0, 0, 20, 20, paint);
}


// MainActivity: void onCreate()

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyView myview = new MyView(getBaseContext());
setContentView(myview);

是的,当然是因为
setContentView(myview)

方法
setContentView
将传递的视图(或布局)设置为活动的可见内容

在您的情况下,新的自定义视图将替换先前充气的布局

要同时显示UI元素和自定义视图,请在自定义视图中添加其他两个构造函数,并从XML中添加自定义视图,就像添加简单的
TextView
一样

自定义视图的构造函数应定义如下:

public MyView(Context context) {
    super(context);
}

public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public MyView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}

或者您可以参考一些布局,例如
LinearLayout
,并使用
layout.addView(myView)添加自定义视图的实例

您不应该对veiw使用baseContext-使用活动上下文,因为视图已绑定到活动。另外,您应该将视图添加到布局中(以编程方式或最好是以xml方式),而不是设置两次内容视图(因为第二次设置将覆盖第一次设置)。您可以帮助我如何从mainactivity调用构造函数吗?您从main activity调用构造函数的方式还可以。但是你不能像那样使用
setContentView
。或者,在不使用构造函数的情况下,在放入所有3个构造函数后,可以从XML添加自定义视图,并使用
findViewById
获取引用。