HarmonyOS鸿蒙Next中为什么hdsEffect点光源不生效?

HarmonyOS鸿蒙Next中为什么hdsEffect点光源不生效? 新创建的项目,sdk和模拟器都是6.0的。

import { hdsEffect } from ‘@kit.UIDesignKit’;

无论用官方的案例还是其他的,都没有效果,不报错,但是及时没有发光的效果。

这是代码:

import { hdsEffect } from '[@kit](/user/kit).UIDesignKit';

@Entry
@Component
struct Index {
  @State lightSourceType: hdsEffect.PointLightSourceType = hdsEffect.PointLightSourceType.NONE;

  build() {
    Column({ space: 10 }) {
      Row({ space: 10 }) {
        Column() {
          Text('illuminated').padding(10).fontColor(Color.White)
          Text('illuminated').padding(10).fontColor(Color.White)
          Text('illuminated').padding(10).fontColor(Color.White)
        }
        .visualEffect(new hdsEffect.HdsEffectBuilder()
          .pointLight({
            illuminatedType: hdsEffect.PointLightIlluminatedType.BORDER
          })
          .buildEffect())
      }
      Row({ space: 10 }) {
        Button('lightSource')
          .visualEffect(new hdsEffect.HdsEffectBuilder()
            .pointLight({
              sourceType: this.lightSourceType,
              illuminatedType: hdsEffect.PointLightIlluminatedType.BORDER
            })
            .buildEffect())
          .onTouch((event: TouchEvent) => {
            if (event.type === TouchType.Down) {
              this.lightSourceType = hdsEffect.PointLightSourceType.BRIGHT;
            } else if (event.type === TouchType.Up || event.type === TouchType.Cancel) {
              this.lightSourceType = hdsEffect.PointLightSourceType.NONE;
            }
          })
      }
      Row({ space: 10 }) {
        Column() {
          Text('illuminated').padding(10).fontColor(Color.White)
          Text('illuminated').padding(10).fontColor(Color.White)
          Text('illuminated').padding(10).fontColor(Color.White)
        }
        .visualEffect(new hdsEffect.HdsEffectBuilder()
          .pointLight({
            illuminatedType: hdsEffect.PointLightIlluminatedType.BORDER
          })
          .buildEffect())
      }
    }
    .backgroundColor(Color.Black)
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

更多关于HarmonyOS鸿蒙Next中为什么hdsEffect点光源不生效?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

开发者您好,hdsEffect在模拟器上不生效。

官方文档模拟器与真机的差异清楚的描述了模拟器对各种Kit的支持情况,UI Design Kit(UI设计套件)视效不支持模拟器。开发者在无真机或者模拟器不具备支持能力的情况时可以使用云调试

如果您需要在模拟器使用此功能,麻烦提供下以下信息,

请问您是在什么样的业务场景中使用该能力,交互流程是怎样的,在哪一个环节遇到了问题?方便提供一下其他开发平台的实现方案或者接口(优先官方文档的内容)吗?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

更多关于HarmonyOS鸿蒙Next中为什么hdsEffect点光源不生效?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的 我上真机尝试下 另外我问下 我想做一个 编辑图片 然后将编辑后的图片保存到图库 有没有推荐的api或者文档 ?,

好的我看看,

模拟器暂不支持hdsEffect

可用真机进行代码调试,我这边真机是没问题的

在HarmonyOS Next中,hdsEffect点光源不生效通常与以下原因有关:

  1. 渲染环境未正确配置:确保在ArkUI的3D场景中启用了光照计算,并正确设置了场景的环境光与材质属性。
  2. 光源参数设置问题:检查点光源的位置、强度、衰减范围等参数是否在有效范围内,避免被其他光源覆盖或遮挡。
  3. 着色器兼容性:部分自定义着色器可能未适配Next的渲染管线,需使用官方推荐的材质与光照模型。
  4. 设备支持限制:确认运行设备的GPU是否支持所需的光照特性,部分低端设备可能默认关闭高级光照效果。

建议直接查阅HarmonyOS Next的官方图形开发文档,确认API调用是否符合最新规范。

根据你提供的代码和描述,hdsEffect点光源不生效,最可能的原因是视觉效果的生效条件未被满足

在HarmonyOS Next的hdsEffect中,pointLight效果(尤其是BORDER发光类型)的视觉表现依赖于组件背景。你的代码中,应用效果的ColumnButton组件没有设置明确的背景色或背景样式

hdsEffect.PointLightIlluminatedType.BORDER 会在组件边界内部区域产生发光效果。如果组件背景是透明的(默认状态),或者背景与发光颜色对比度不足,发光效果在视觉上就难以察觉,看起来像是“没生效”。

解决方案: 为你应用了 .visualEffect 的组件设置一个不透明的背景色。修改你的代码示例如下:

// 对于第一个和第三个Column,添加背景色,例如灰色
Column() {
  Text('illuminated').padding(10).fontColor(Color.White)
  Text('illuminated').padding(10).fontColor(Color.White)
  Text('illuminated').padding(10).fontColor(Color.White)
}
.backgroundColor(Color.Gray) // 关键:添加背景色
.visualEffect(new hdsEffect.HdsEffectBuilder()
  .pointLight({
    illuminatedType: hdsEffect.PointLightIlluminatedType.BORDER
  })
  .buildEffect())

// 对于Button,其本身有默认背景,但为了效果明显,也可以明确设置
Button('lightSource')
  .backgroundColor(Color.Gray) // 明确设置按钮背景色
  .visualEffect(new hdsEffect.HdsEffectBuilder()
    .pointLight({
      sourceType: this.lightSourceType,
      illuminatedType: hdsEffect.PointLightIlluminatedType.BORDER
    })
    .buildEffect())

核心要点:

  1. 背景依赖BORDER发光效果作用于组件背景层之上。没有背景或背景透明,效果不可见。
  2. 颜色对比:确保背景色与发光颜色(通常是系统定义的强调色)有足够的对比度。在黑色(Color.Black)的页面背景下,使用深灰色背景比浅色背景可能更易观察效果。
  3. 组件类型Button组件本身具有默认样式,其背景可能已满足条件。但自定义的ColumnRow等容器组件,必须显式设置背景。

修改后,点光源的边界发光效果应该可以正常显示。如果仍不生效,请检查模拟器或真机的系统版本是否完全支持该API,并确认导入的模块路径@kit.UIDesignKit是否正确。

回到顶部