【问题标题】:Draw canvas on layout without hiding elements on UI在布局上绘制画布而不在 UI 上隐藏元素
【发布时间】:2018-11-28 15:32:33
【问题描述】:

我使用下面的方法在布局上绘制了一些东西,它工作正常,矩形显示出来,但 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);

【问题讨论】:

  • 您不应该将 baseContext 用于查看 - 使用活动上下文,因为视图绑定到活动。此外,您应该将视图添加到布局中(以编程方式或最好在 xml 中),而不是设置内容视图两次(因为第二次会覆盖第一次)。

标签: java android canvas view draw


【解决方案1】:

是的,当然是因为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);添加自定义视图的实例

【讨论】:

  • 您能帮我解决如何从 mainactivity 调用构造函数吗?
  • 您从主活动调用构造函数的方式是可以的。但是你不能像那样使用setContentView。或者,不使用构造函数,在您放入所有 3 个构造函数后,您可以从 XML 添加自定义视图,并使用 findViewById 获取引用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2022-01-10
  • 2014-05-10
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多