2

我正在使用 Java SDK 在 HarmonyOS 中创建一个自定义组件,我需要一个属性来获取元素(即 VectorElement 或 png 格式图标)作为来自 xml 布局文件的输入。

例如:

ohos:sliderIcon="$graphic:custom_icon" (VectorElement)
ohos:sliderIcon="$media:ic_arrow"      (PNG format icon)

现在我正在像这样的自定义组件类中获取元素

Element sliderIcon = attrSet.getAttr(Attribute.SLIDER_ICON).isPresent()
                    ? attrSet.getAttr(Attribute.SLIDER_ICON).get().getElement()
                    : new VectorElement(getContext(), ResourceTable.Graphic_slidetoact_ic_arrow);

但是,上面的代码仅适用于 VectorElement 图标,不适用于 PNG 格式的图标。

我可以在运行时从 java 代码设置 VectorElement 和 PNG 格式图标,如下所示:

对于向量元素:

Element sliderIcon = new VectorElement(getContext(), ResourceTable.Graphic_custom_icon);

对于 PNG 格式的图标:

//You can set png format icon using PixelMapElement.
     try {
            Element sliderIcon = new PixelMapElement(getResourceManager().getResource(ResourceTable.Media_ic_arrow));
     } catch (IOException | NotExistException e) {
            e.printStackTrace();
     } 

所以我的问题是

如何在自定义组件中获取 PNG 格式图标作为属性?

或者

如何获取已传递元素的资源/参考 id?

4

2 回答 2

0

刚试了你的pixelMap方法PixelMapElement

PixelMapElement pixelMapElement = (PixelMapElement) attrSet.getAttr("sliderIcon").get().getElement();
PixelMap pixelMap = pixelMapElement.getPixelMap();

onDraw方法中测试并证明是可用的。

@Override
public void onDraw(Component component, Canvas canvas) {
    PixelMapHolder pixelMapHolder = new PixelMapHolder(pixelMap);
    canvas.drawPixelMapHolder(pixelMapHolder,0,0,new Paint());
}
于 2021-07-29T02:07:19.393 回答
0
Element sliderIcon = attrSet.getAttr(Attribute.SLIDER_ICON).isPresent()
                    ? attrSet.getAttr(Attribute.SLIDER_ICON).get().getElement()
                    : new VectorElement(getContext(), ResourceTable.Graphic_slidetoact_ic_arrow);

此解决方案适用于两种元素 VectorElement 和 PixleMapElement(PNG 格式图标)。我做得不好是我的错,我在 xml 文件中犯了错误,ohos:sliderIcon="$Media:ic_arrow" 我们必须在媒体中使用小m 。像这样 ohos:sliderIcon="$media:ic_arrow"

于 2021-08-17T13:19:57.150 回答