自定义颜色透明度如何实现?

每次使用一个色值不同透明度时,想写一个方法,出入opacity及color,得到带有透明度的颜色,如下:

public static setColorTransparency(opacity: number, color: ResourceColor): String {  
  let colorStr = getColorStr(color); //伪代码,期望结果 '#FFFFFF'  
  
  let opacityStr = Math.max(0, Math.min(Math.round(opacity * 255), 255)).toString(16).toUpperCase()  
  
  return '#' + opacityStr + colorStr.replace('#','')  
}

希望能帮助实现,最好能将返回值也变成 ResourceColor而不用string,或者有更好的设置透明度的方案。

HarmonyOS
2024-10-14 10:38:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

可以参考代码:

@Entry  
@Component  
struct Index {  
  @State message: string = 'Hello World';  
  @State opacityValue: number = 1;  
  
  getColor() {  
    return `rgba(222,33,44,${this.opacityValue})`  
  }  
  
  build() {  
    Row() {  
      Column({ space: 10 }) {  
        Text(this.message)  
          .fontSize(50)  
          .fontWeight(FontWeight.Bold)  
          .fontColor(this.getColor())  
  
        Button('0').onClick(() => {  
          this.opacityValue = 0;  
        })  
        Button('0.5').onClick(() => {  
          this.opacityValue = 0.5;  
        })  
        Button('1').onClick(() => {  
          this.opacityValue = 1;  
        })  
  
      }  
      .width('100%')  
    }  
    .height('100%')  
  }  
}

资源json里定义的颜色是没法修改的,编译期就会确定资源的内容和id。如果要对这里面的值进行修改,只能通过resourceManager接口先把颜色值取出来再进行处理,getColorByNameSync需要输入资源名称,对应json文件里的name字段,示例代码如下:

private getColor(colorName: string, opacity: number = 1) {  
  let opacityStr = Math.max(0, Math.min(Math.round(opacity * 255), 255)).toString(16).padStart(2, '0').toLowerCase();  
  
  const colorValue = getContext(this).resourceManager.getColorByNameSync(colorName).toString(16);  
  
  return '#' + opacityStr + colorValue.substring(2);  
}
分享
微博
QQ
微信
回复
2024-10-14 17:41:02
相关问题
HarmonyOS 如何设置颜色透明度
750浏览 • 1回复 待解决
HarmonyOS color颜色怎么指定透明度
754浏览 • 1回复 待解决
SideBarContainer如何设置透明度
2345浏览 • 1回复 待解决
设置子窗口透明度未生效
1728浏览 • 1回复 待解决
背景色透明度问题解决方案
573浏览 • 1回复 待解决
HarmonyOS 自定义Dialog背景色透明问题
976浏览 • 1回复 待解决