【每日学点HarmonyOS Next知识】gif设置颜色、自定义装饰器、分屏切换、底部留白、页面获取窗口
#### 1、HarmonyOS 支持给gif设置颜色吗?
gif是红色的,我们的需求是把gif的红色设置为客户端的主题色。主题色可以是任意颜色。
具体矩阵规则可参考链接中的colorFilter说明:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-image-V5#colorfilter9
通过colorFilter属性为图像设置颜色滤镜效果,可参考如下demo:
```
@Entry
@Component
struct ImageExample1 {
build() {
Column() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start }) {
Row() {
// 加载gif格式图片
Image($r('app.media.ic_audio_album_playing'))
.width(110).height(110).margin(15)
.overlay('gif', { align: Alignment.Bottom, offset: { x: 0, y: 20 } })
.colorFilter(
[
0, 0, 0, 0, 1, // 红色通道
1, 0, 0, 0, 0, // 绿色通道
0, 0, 0, 0, 0, // 蓝色通道
0, 0, 0, 1, 0// 透明度通道
]
)
}.backgroundColor('#ffff')
}
}.height(320).width(360).padding({ right: 10, top: 10 })
}
}
```
#### 2、HarmonyOS ArkTS 如何实现自定义装饰器?
ArkTS 如何实现自定义装饰器?比如 对 页面添加通用的某个功能
自定义装饰器可以参考demo
```
/**
* 自定义类装饰器
* @param params 装饰器参数
* @returns
*/
function CustomerDecorator(params: string) {
// targetClass为类的上下文
return (targetClass: Function) => {
console.log(params);
targetClass.prototype.buy();
}
}
@CustomerDecorator('带参类装饰器')
class CustomerServeice {
constructor() {
}
buy() {
console.log(`购买`);
}
}
// new对象,触发自定义类装饰器
let customerService = new CustomerServeice();
```
#### 3、HarmonyOS 使用Window时,做分屏切换时,回到自己的应用,关闭window重新弹window,子window的事件无法响应?
自己应用弹出子window分屏B应用进入后台,关闭子window,回到自己应用,重新弹子window子window无法响应点击事件
请参考以下代码
EntryAbility.ets
```
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
AppStorage.setOrCreate("windowStage", windowStage);
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
// Main window is destroyed, release UI related resources
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
```
Index.ets
```
import window from '@ohos.window';
@Entry
@Component
struct Index {
aboutToAppear() {
let windowStage_: window.WindowStage = AppStorage.get("windowStage") as window.WindowStage;
windowStage_.createSubWindow("subWindow", (err, win) => { //创建透明子窗口并打开
win.setUIContent('pages/Page1');
win.resize(600, 600)
win.moveWindowTo(300, 300)
win.showWindow();
})
}
aboutToDisappear(){
window.findWindow("subWindow").destroyWindow()
}
build() {
Row() {
Column() {
Button("子窗口弹窗")
.margin({ top: 20 })
.onClick(() => {
})
}
.width('100%')
}
.height('100%')
}
}
```
Page1.ets
```
@Entry
@Component
struct Page1 {
@State message: string = 'Hello World';
build() {
RelativeContainer() {
Text(this.message)
.id('Page1HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(()=>{
console.log('===================>点击事件')
})
}
.height('100%')
.width('100%')
.backgroundColor(Color.Pink)
}
}
```
#### 4、HarmonyOS 页面底部留白是否可填充,使页面全屏?
参考下沉浸式布局文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-develop-apply-immersive-effects-V5
#### 5、HarmonyOS 如何在Page 中 获取 windowClass?
可参考以下代码
```
import { window } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
@Entry
@Component
struct Index {
context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
build() {
Column(){
Button("获取当前页面的window",{type:ButtonType.Capsule}).onClick(()=>{
// 获取当前应用内最上层的子窗口,若无应用子窗口,则返回应用主窗口
window.getLastWindow(this.context).then((lastWindow) => {
console.log("获取到到的当前页面的window:", lastWindow)
})
})
}.width("100%").height("100%")
}
}
```
##鸿蒙核心技术##鸿蒙开发工具##DevEco Studio##
##社交##
更多推荐
所有评论(0)