【发布时间】:2021-07-31 05:23:13
【问题描述】:
我在组件中找不到onDraw() 方法。有人可以向我解释如何在 Harmony OS 中覆盖组件的 onDraw 方法吗?
【问题讨论】:
标签: java android huawei-mobile-services huawei-developers harmonyos
我在组件中找不到onDraw() 方法。有人可以向我解释如何在 Harmony OS 中覆盖组件的 onDraw 方法吗?
【问题讨论】:
标签: java android huawei-mobile-services huawei-developers harmonyos
public class CustomComponent extends Component implements Component.DrawTask {
public CustomComponent(Context context) {
super(context);
// DrawTask
addDrawTask(this::onDraw);
}
@Override
public void onDraw(Component component, Canvas canvas) {
...
}
}
【讨论】:
实现Component.DrawTask接口,使用onDraw方法执行绘制任务。您可以使用该方法提供的Canvas 来精确控制UI 元素的外观。在执行绘制任务之前,需要定义一个Paint。
示例代码如下:
public class CustomComponent extends Component implements Component.DrawTask,Component.EstimateSizeListener {
// Circle width
private static final float CIRCLE_STROKE_WIDTH = 100f;
// Paint for drawing the circle
private Paint circlePaint;
public CustomComponent(Context context) {
super(context);
// Initialize the Paint.
initPaint();
// Add a draw task.
addDrawTask(this);
}
private void initPaint(){
circlePaint = new Paint();
circlePaint.setColor(Color.BLUE);
circlePaint.setStrokeWidth(CIRCLE_STROKE_WIDTH);
circlePaint.setStyle(Paint.Style.STROKE_STYLE);
}
@Override
public void onDraw(Component component, Canvas canvas) {
// Draw a circle whose center coordinate is (500,500) and radius is 400.
canvas.drawCircle(500,500,400,circlePaint);
}
...
}
关于Harmony OS中覆盖onDraw()方法的详细信息,请参考Docs。
【讨论】: