鸿蒙自定义组件以及流程问题 原创
飞中缘a
 发布于 2021-3-25 17:37
 浏览
 3收藏
1、自定义类继承Component
2、添加构造函数,对应的几个构造
3、添加测量函数onMeasure对应onEstimateSize,实现Component.EstimateSizeListener
4、添加计算函数onLayout对应onArrange,实现ComponentContainer.ArrangeListener
5、添加绘制函数onDraw不变,实现Component.DrawTask
之后就可以实现具体的逻辑了
代码如下:
public class TextDemo extends Component implements Component.DrawTask, Component.EstimateSizeListener, ComponentContainer.ArrangeListener {
   private Paint mPaint = new Paint();
   private int color;
   private RectFloat mRectFloat;
   {
       /**
        * 防抖动
        */
       mPaint.setDither(true);
       /**
        * 抗锯齿,降低分辨率,提高绘制效率
        */
       mPaint.setAntiAlias(true);
   }
   public TextDemo(Context context) {
       this(context, null);
   }
   public TextDemo(Context context, AttrSet attrSet) {
       this(context, attrSet, null);
   }
   public TextDemo(Context context, AttrSet attrSet, String styleName) {
       super(context, attrSet, styleName);
       initialize(attrSet);
       setEstimateSizeListener(this);
       addDrawTask(this);
   }
   /**
    * 获取自定义属性
    *
    * @param attrs
    */
   private void initialize(AttrSet attrs) {
       color = attrs.getAttr("text_color").get().getIntegerValue();
   }
   /**
    * 计算
    *
    * @param i
    * @param i1
    * @param i2
    * @param i3
    * @return
    */
   @Override
   public boolean onArrange(int i, int i1, int i2, int i3) {
//        do something
       return false;
   }
   /**
    * 测量
    *
    * @param i
    * @param i1
    * @return
    */
   @Override
   public boolean onEstimateSize(int i, int i1) {
//        do something
       return false;
   }
   /**
    * 绘制
    *
    * @param component
    * @param canvas
    */
   @Override
   public void onDraw(Component component, Canvas canvas) {
//        do something
       canvas.drawRect(mRectFloat, mPaint);
   }
}©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
    已于2021-3-26 16:28:00修改
 
        赞
        2
 
        收藏 3
      
 回复
  相关推荐
 




















请问view.draw(canvas)怎么替代
如果能够再详细点就更好了~
onDraw(Component component, Canvas canvas)
用这个
简单明了
感谢支持!