#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();
}
}