Java 在布局上绘制画布,而不隐藏UI上的元素
我使用下面的方法在布局上绘制一些东西,效果很好,矩形显示出来,但UI上的所有其他内容都不可见,即使画布不在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
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
获取引用。