Есть ли какая-либо альтернатива для invalidateSelf(Android) в HarmonyOS?

#java #android #huawei-mobile-services #huawei-developers #harmonyos

Вопрос:

В моем проекте я хочу запустить реализацию в draw() том, что присутствует в классе элементов. В Android мы должны invalidateSelf запустить drawToCanvas() . Какова альтернатива в HarmonyOS?

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

Ответ №1:

По словам команды, в настоящее время у HarmonyOS нет альтернативы invalidateSelf . Но есть планы по его поддержке в будущем. Пожалуйста, следите за обновлениями на официальных сайтах HarmonyOS.

Ответ №2:

Как справедливо предположила Ширли, в HarmonyOS нет прямой альтернативы для invalidateSelf (), чтобы вызвать drawToCanvas() в классе элементов.

Но, поскольку большинство объектов элементов в идеале будут встроены в объект компонента, вы можете попытаться реализовать эту функциональность, запустив drawToCanvas() из функции onDraw() класса компонентов (должна быть реализована с помощью интерфейса DrawTask или создать анонимный внутренний класс для объекта компонента).

Пожалуйста, обратитесь к приведенным ниже двум фрагментам для лучшего понимания того, как вызвать 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();
   }
}