鸿蒙自定义组件以及流程问题 原创

发布于 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
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐