2

在我的项目中,我想触发draw()Element 类中存在的实现。在 android 中,我们必须invalidateSelf触发drawToCanvas(). HarmonyOS 中的替代方案是什么?

animator.addListener(new AnimatorListenerAdapter() {
      @Override
      public void onAnimationRepeat(Animator animation) {
             shiftColor(drawable.getColorMain(), drawable.getColorSub());
             invalidateSelf();
      }
});
4

2 回答 2

1

据该团队称,HarmonyOS 目前没有invalidateSelf. 但有计划在未来支持它。请继续关注HarmonyOS官网。

于 2021-08-04T03:40:11.527 回答
0

正如 shirley 正确建议的那样,HarmonyOS 中的 invalidateSelf() 没有直接替代方法来触发 Element 类中的 drawToCanvas()。

但是,由于大多数 Element 对象理想地嵌入在 Component 对象中,您可以尝试通过从 Component 类的 onDraw() 函数触发 drawToCanvas() 来实现此功能(必须使用 DrawTask 接口实现或创建一个组件对象上的匿名内部类)。

请参考以下两个片段,以更好地了解如何在 Element 类中触发 drawToCanvas():

public class CustomElement extends Element {
   CustomComponent customComponent;

   public void drawToCanvas(Canvas canvas) {
        .
        .
   }
   
   public void invalidateSelf() {
      customComponent.invalidate();
   }
}

public class CustomComponent extends Component implements Component.DrawTask {

   //initialize this in constructor of the component  
   CustomElement customElement;

   public void onDraw(Component component, Canvas canvas) {
      customElement.drawToCanvas(canvas);
   }

}

另一种方法是

public class CustomElement extends Element {

   public void drawToCanvas(Canvas canvas) {
        .
        .
   }
}

public class MainAbilitySlice extends AbilitySlice {

   Component mComponent;
   
   public void refreshView() {
      CustomElement customElement = new CustomElement();
      mComponent.setBackground(customElement);
      mComponent.addDrawTask(new Component.DrawTask() {
          @Override
          public void onDraw(Component component, Canvas canvas) {
              customElement.drawToCanvas(canvas);
          }
      });
      mComponent.invalidate();
   }
}
于 2021-08-05T06:29:55.653 回答