1

onDraw()我在组件中找不到该方法。有人可以向我解释如何在 Harmony OS 中覆盖组件的 onDraw 方法吗?

4

2 回答 2

0

实现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()方法的详细信息,请参阅文档

于 2021-08-03T06:35:00.257 回答
0
  1. 首先您必须为您的自定义组件实现Component.DrawTask,然后您将能够覆盖onDraw()并执行自定义绘图操作。例如,
 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) {
        ...
    }

 }
于 2021-07-31T12:30:29.270 回答