鸿蒙UI开发——实时动态模糊效果

HarmonyOS Next开发学习手册——动画效果(模糊) 动画效果可以丰富界面的细节,提升UI界面的真实感和品质感。例如,模糊和阴影效果可以让物体看起来更加立体,使得动画更加生动。ArkUI提供了丰富的效果接口,开发者可快速打造出精致、个性化的效果。本章中主要对常用的模糊、阴影和色彩效果等效果接口进行了介绍。模糊可以用来体现界面空间的纵深感,区分前后元素的层级关系。 阅读详情
AI摘要

模糊效果可体现界面空间纵深感,区分元素层级。ArkUI提供5种接口实现实时模糊,包括backdropBlur、blur等,可实现背景、前景模糊及动态模糊效果。文中对各接口进行详细介绍,并给出代码示例,同时提醒避免滥用,注意性能开销及使用限制。

1、概 述

模糊效果可以用来体现界面空间的纵深感,区分前后元素的层级关系。ArkUI提供了5种接口来实现实时模糊。分别是:

  • backdropBlur

  • blur

以调节模糊半径方式来实现背景模糊和前景(内容)模糊

  • backgroundBlurStyle

  • foregroundBlurStyle

提供了更丰富的模糊样式设置来设置背景模糊和前景(内容)模糊

  • motionBlur

为当前组件添加由缩放大小或位移变化引起的运动过程中的动态模糊效果,入参为模糊半径和锚点坐标。

【注意,我们避免滥用这个效果,实时模糊会增加性能开销】

下面针对这5中接口做详细介绍。

2、接口介绍

2.1、 backdropBlur

为组件添加背景模糊效果(可以自定设置模糊半径和灰阶参数)。接口定义如下:

// value为模糊半径,模糊半径越大越模糊,为0时不模糊。backdropBlur(value: number, options?: BlurOptions)

其中,BlurOptions是灰阶梯参数,定义如下:​​​​​​​

struct BlurOptions {  grayscale: [number, number];}// grayscale属性说明如下:grayscale是灰阶模糊参数,两参数取值范围均为[0,127]。对图像中的黑白色进行色阶调整,使其趋于灰色更为柔和美观,对图像中的彩色调整没有效果。参数一表示对黑色的提亮程度,参数二表示对白色的压暗程度,参数值越大调整效果越明显(黑白色变得越灰),有效值范围0-127。例如:设置参数为(20,20),图片中的黑色像素RGB:[0, 0, 0]会调整为[20,20,20],白色像素RGB:[255,255,255]会调整为[235,235,235](255-20),图像中的彩色像素维持不变。

一个案例效果如下:

图片

代码如下(注意第12行):​​​​​​​

@Entry@Componentstruct BlurEffectsExample {  build() {    Column({ space: 10 }) {      Text('backdropBlur')        .width('90%')        .height('90%')        .fontSize(20)        .fontColor(Color.White)        .textAlign(TextAlign.Center)        .backdropBlur(10) // 对背景进行模糊        .backgroundImage($r('图片资源路径'))        .backgroundImageSize({ width: 400, height: 300 })    }    .width('100%')    .height('50%')    .margin({ top: 20 })  }}

2.2、blur

为组件添加前景(内容)模糊效果。接口定义如下:​​​​​​​

// value为模糊半径,模糊半径越大越模糊,为0时不模糊。blur(value: number, options?: BlurOptions)

其中value与options的含义与backdropBlur相同,这里不赘述。

一个案例效果如下:

代码如下(第22行):​​​​​​​

@Entry@Componentstruct Index1 {  @State radius: number = 0;  @State text: string = '';  @State y: string = '手指不在屏幕上';  aboutToAppear() {    this.text = "按住屏幕上下滑动\n" + "当前手指所在y轴位置 :" + this.y +    "\n" + "当前图片模糊程度为 : " + this.radius;  }  build() {    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.SpaceBetween }) {      Text(this.text)        .height(200)        .fontSize(20)        .fontWeight(FontWeight.Bold)        .fontFamily("cursive")        .fontStyle(FontStyle.Italic)      Image($r("图片资源路径"))        .blur(this.radius) // 使用blur接口为照片组件添加内容模糊效果        .height('100%')        .width("100%")        .objectFit(ImageFit.Cover)    }.height('100%')    .width("100%")    .onTouch((event?: TouchEvent) => {      if(event){        if (event.type === TouchType.Move) {          this.y = Number(event.touches[0].y.toString()).toString();          this.radius = Number(this.y) / 10; // 根据跟手过程中的滑动距离修改模糊半径,配合模糊接口,形成跟手模糊效果        }        if (event.type === TouchType.Up) {          this.radius = 0;          this.y = '手指离开屏幕';        }      }      this.text = "按住屏幕上下滑动\n" + "当前手指所在y轴位置 :" + this.y +      "\n" + "当前图片模糊程度为 : " + this.radius;    })  }}

2.3、 backgroundBlurStyle

为当前组件提供一种在背景和内容之间的模糊能力,通过枚举值的方式封装了不同的模糊半径、蒙版颜色、蒙版透明度、饱和度、亮度。接口定义如下:​​​​​​​

// value: 背景模糊样式。模糊样式中封装了模糊半径、蒙版颜色、蒙版透明度、饱和度、亮度五个参数。// options: 背景模糊选项。backgroundBlurStyle(value: BlurStyle, options?: BackgroundBlurStyleOptions)

其中BlurStyle是一个枚举,定义如下:​​​​​​​

enum BlurStyle { Thin, //轻薄材质模糊。 Regular, //普通厚度材质模糊。 Thick, //厚材质模糊。 BACKGROUND_THIN, //近距景深模糊。 BACKGROUND_REGULAR, //中距景深模糊。 BACKGROUND_THICK, // 远距景深模糊。 BACKGROUND_ULTRA_THICK, //超远距景深模糊。 NONE, // 关闭模糊。 COMPONENT_ULTRA_THIN, //组件超轻薄材质模糊。 COMPONENT_THIN, //组件轻薄材质模糊。 COMPONENT_REGULAR,// 组件普通材质模糊。 COMPONENT_THICK, // 组件厚材质模糊。 COMPONENT_ULTRA_THICK, // 组件超厚材质模糊。}

BackgroundBlurStyleOptions继承自BlurOptions,BlurOptions在前文中有介绍,BackgroundBlurStyleOptions定义如下:​​​​​​​

struct BackgroundBlurStyleOptions extends BlurOptions { params: BackgroundBrightnessOptions;}// BackgroundBrightnessOptions 结构定义如下struct BackgroundBrightnessOptions { //亮度变化速率。亮度变化速率越大,提亮程度下降速度越快。若rate为0,则lightUpDegree将不生效,即不会产生任何提亮效果。 // 默认值:0.0,取值范围:(0.0, +∞) rate: number,  // 提亮程度。提亮程度越大,亮度提升程度越大。 // 默认值:0.0,取值范围:[-1.0, 1.0]lightUpDegree: number, }

对于组件背景内容,每个像素自身的亮度(灰阶值)的计算公式为:

Y = (0.299R + 0.587G + 0.114B)/ 255.0(R、G、B分别表示像素红色、绿色和蓝色通道的值,Y表示灰阶值),通过上述公式将像素点的灰阶值归一化至0~1的范围。

每个像素的亮度提升计算公式为:ΔY = -rate*Y + lightUpDegree。例如,当rate=0.5,lightUpDegree=0.5时,对于灰阶值为0.2的像素点,亮度增加值为-0.5*0.2 + 0.5 = 0.4,对于灰阶值为1的像素点,亮度增加值为-0.5*1 + 0.5 = 0。

一个示例效果如下:

图片

代码如下:​​​​​​​

@Entry@Componentstruct BackDropBlurStyleDemo {  build() {    Grid() {      GridItem() {        Column() {          Column() {            Text('原图')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          Text('原图')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Thin')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          // BlurStyle.Thin: 为组件添加轻薄材质模糊效果          // ThemeColorMode.LIGHT: 固定使用浅色模式效果          // AdaptiveColor.DEFAULT: 不使用取色模糊,使用默认的颜色作为蒙版颜色          // scale: 背景材质模糊效果程度,默认值是1          .backgroundBlurStyle(BlurStyle.Thin, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Thin')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Regular')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.Regular, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Regular')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Thick')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.Thick, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Thick')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_THIN')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.BACKGROUND_THIN, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_THIN')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_REGULAR')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.BACKGROUND_REGULAR, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_REGULAR')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_THICK')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.BACKGROUND_THICK, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_THICK')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_ULTRA_THICK')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .backgroundBlurStyle(BlurStyle.BACKGROUND_ULTRA_THICK, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_ULTRA_THICK')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)    }    .columnsTemplate('1fr 1fr')    .rowsTemplate('1fr 1fr 1fr 1fr')    .width('100%')    .height('100%')    .margin({ top: 40 })  }}

2.4、 foregroundBlurStyle

为当前组件提供前景(内容)模糊能力。接口介绍如下:​​​​​​​

 // value: 内容模糊样式。// options: 内容模糊选项foregroundBlurStyle(value: BlurStyle, options?: ForegroundBlurStyleOptions)

其中BlurStyle是枚举,我们在backgroundBlurStyle中已经介绍过,ForegroundBlurStyleOptions定义如下:​​​​​​​

struct ForegroundBlurStyleOptions extends BlurOptions { //内容模糊效果使用的深浅色模式。取值有:SYSTEM | LIGHT | DARK // 默认值:ThemeColorMode.SYSTEM,  colorMode: ThemeColorMode,  // 内容模糊效果使用的取色模式。取值有:DEFAULT | AVERAGE // 默认值:AdaptiveColor.DEFAULT adaptiveColor: AdaptiveColor,  // 灰阶模糊参数。 // 默认值:grayScale: [0,0] blurOptions: BlurOptions, // 内容模糊效果程度。默认值:1.0,取值范围:[0.0, 1.0] scale: number,}

一个案例如下:

图片

代码如下:​​​​​​​

@Entry@Componentstruct ForegroundBlurStyleDemo {  build() {    Grid() {      GridItem() {        Column() {          Column() {            Text('原图')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          Text('原图')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Thin')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          // BlurStyle.Thin: 为组件添加轻薄材质模糊效果          // ThemeColorMode.LIGHT: 固定使用浅色模式效果          // AdaptiveColor.DEFAULT: 不使用取色模糊,使用默认的颜色作为蒙版颜色          // scale: 背景材质模糊效果程度,默认值是1          .foregroundBlurStyle(BlurStyle.Thin, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Thin')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Regular')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.Regular, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Regular')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('Thick')              .fontSize(20)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.Thick, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('Thick')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_THIN')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.BACKGROUND_THIN, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_THIN')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_REGULAR')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.BACKGROUND_REGULAR, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_REGULAR')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_THICK')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.BACKGROUND_THICK, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_THICK')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)      GridItem() {        Column() {          Column() {            Text('BACKGROUND_ULTRA_THICK')              .fontSize(12)              .fontColor(Color.White)              .textAlign(TextAlign.Center)              .width('100%')              .height('100%')          }          .height(100)          .aspectRatio(1)          .borderRadius(10)          .backgroundImage($r('app.media.share'))          .foregroundBlurStyle(BlurStyle.BACKGROUND_ULTRA_THICK, {            colorMode: ThemeColorMode.LIGHT,            adaptiveColor: AdaptiveColor.DEFAULT,            scale: 0.1          })          Text('BACKGROUND_ULTRA_THICK')            .fontSize(12)            .fontColor(Color.Black)        }        .height('100%')        .justifyContent(FlexAlign.Start)      }      .width(200)      .height(200)    }    .columnsTemplate('1fr 1fr')    .rowsTemplate('1fr 1fr 1fr 1fr')    .width('100%')    .height('100%')    .margin({ top: 40 })  }}

2.5、motionBlur

在当前组件由缩放大小或位移变化引起的运动过程中,增加动态模糊效果。

注意:

  1. 不建议在组件内转场、共享元素转场、组件内隐式元素转场、粒子动画场景下使用该属性,否则会有非预期效果。

  2. 该属性需要在开始状态将motionBlur的参数radius设置为0,否则冷启动时会有非预期效果。

  3. 该属性需要与动画的AnimateParam的onFinish参数配合使用,需要在运动模糊动画结束后将motionBlur的参数radius置为0,否则会有非预期效果。

  4. 在使用该属性过程中,不要在使用过程中频繁更改同一个组件的模糊半径,否则会有非预期效果。比如示例中的动画,频繁点击会出现模糊效果偶尔失效的情况。

  5. 运动模糊锚点坐标需要与动画缩放的锚点保持一致,否则会有非预期效果。

  6. 模糊半径建议设置1以内,否则会有非预期效果。

接口定义如下:​​​​​​​

// value: 定义运动模糊参数。motionBlur(value: MotionBlurOptions)

MotionBlurOptions结构定义如下:​​​​​​​

struct MotionBlurOptions {// 模糊半径,取值范围[0.0, ∞),建议设置1.0以内。 radius: number, // 运动模糊锚点坐标。运动模糊锚点坐标设置时需要与动画缩放的锚点保持一致设置。 anchor: MotionBlurAnchor,  }// 其中 anchor的MotionBlurAnchor类型定义如下:struc MotionBlurAnchor { x: number, //  锚点坐标x值,取值范围[0.0, 1.0]。 y: number, //  锚点坐标y值,取值范围[0.0, 1.0]。}

示例效果如下:

图片

代码如下(第39行):​​​​​​​

import { curves } from '@kit.ArkUI';@Entry@Componentstruct motionBlurTest {  @State widthSize: number = 400  @State heightSize: number = 320  @State flag: boolean = true  @State radius: number = 0  @State x: number = 0  @State y: number = 0  build() {    Column() {      Column() {        Image($r('app.media.testImg'))          .width(this.widthSize)          .height(this.heightSize)          .onClick(() => {            this.radius = 5;            this.x = 0.5;            this.y = 0.5;            if (this.flag) {              this.widthSize = 100;              this.heightSize = 80;            } else {              this.widthSize = 400;              this.heightSize = 320;            }            this.flag = !this.flag;          })          .animation({            duration: 2000,            curve: curves.springCurve(10, 1, 228, 30),            onFinish: () => {              this.radius = 0;            }          })          .motionBlur({ radius: this.radius, anchor: { x: this.x, y: this.y } })      }    }.width('100%').margin({ top: 5 })  }}

OpenHarmony实战开发-如何实现动画效果中的模糊效果 动画效果可以丰富界面的细节,提升UI界面的真实感和品质感。例如,模糊和阴影效果可以让物体看起来更加立体,使得动画更加生动。ArkUI提供了丰富的效果接口,开发者可快速打造出精致、个性化的效果。本章中主要对常用的模糊、阴影和色彩效果等效果接口进行了介绍。 阅读详情

相关推荐

鸿蒙HarmonyOS实战:ArkUI组件添加内容背景模糊效果

ArkUI提供了丰富的效果接口,开发者可快速打造出精致、个性化的效果。本章中主要对常用的模糊、阴影和色彩效果等效果接口进行了介绍。

2401_84917132的博客 1028

Android实时模糊

关于Android 获取模糊背景的一些调研记录 Android常见的模糊应用场景 分为两种:1,静态模糊 2,动态模糊 静态模糊就是直接模糊一张图片然后设置进View显示,动画模糊也就是实时模糊一般就是指,上层View的模糊背景是根据下层View动态生成的bitmap进行模糊设置的 ,常见的比如华为手机下拉状态栏的模糊背景以及魅族手机的背景模糊. 实时模糊有几个常见问题 如何获取需要模糊的Bitmap 就是如何获取底层View生成视图的Bitmap 模糊算法的选择 性能问题 获取需要模糊的Bitmap

wkk_ly的博客 3830

HarmonyOS NEXT实战开发:动画效果(模糊)

动画效果可以丰富界面的细节,提升UI界面的真实感和品质感。

hanyanyou的博客 1214

css backdrop-blur

backdrop-blur 是一个 CSS 属性,用于在背景上添加模糊效果。它可以通过使用 backdrop-blur 属性来设置背景图像的模糊程度。例如: body { backdrop-blur: 10px; } 这会在整个页面的背景上添加 10px 的模糊效果。你也可以使用其他属性,例如 backdrop-blur-radius 和 backdrop-blur-size,来调整模糊的效...

weixin_42577243的博客 542

鸿蒙5.0进阶开发:UI开发-动画效果(模糊)

本章中主要对常用的模糊、阴影和色彩效果等效果接口进行了介绍。

AyomQAQ的博客 636

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:组件内容模糊)

ArkTS声明式开发(通用属性:组件内容模糊)

m0_64420071的博客 1321

React Native 鸿蒙实战:blur 视图模糊效果在 HarmonyOS 上的接入与使用

React Native 鸿蒙实战:blur 视图模糊效果在 HarmonyOS 上的接入与使用

weixin_62782025的博客 1万+

鸿蒙HarmonyOS NEXT开发:组件内容模糊(ArkTS通用属性)

为当前组件添加内容模糊效果。

shudaoshanBBQ的博客 1043

鸿蒙5.0开发进阶:UI框架动画效果(模糊)

动画效果可以丰富界面的细节,提升UI界面的真实感和品质感。

Androidbye的博客 686

鸿蒙HarmonyOS开发(5.0 Beta)ArkUI组件实现内容背景模糊效果实践

模糊可以用来体现界面空间的纵深感,区分前后元素的层级关系。

yguyf1235的博客 690

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:EffectComponent)

ArkTS声明式开发(容器组件:EffectComponent)

m0_64420071的博客 1275

HarmonyOS Next~鸿蒙系统UI创新实践:原生精致理念下的设计革命

鸿蒙系统通过底层架构创新,正在重新定义移动操作系统的UI设计标准。其原生精致理念不仅体现在视觉层面,更是构建了一套完整的计算美学体系,为万物智联时代的用户体验树立了新标杆。随着分布式能力的持续进化,鸿蒙的UI创新将持续推动人机交互向更自然、更智能的方向发展。

Bruce_xiaowei的博客 881

鸿蒙开发基础 —— ArkUI 组件动画效果

例如,模糊和阴影效果可以让物体看起来更加立体,使得动画更加生动。ArkUI提供了丰富的效果接口,开发者可快速打造出精致、个性化的效果。阴影接口 shadow 可以为当前组件添加阴影效果,该接口支持两种类型参数,开发者可配置 ShadowOptions 自定义阴影效果。ShadowOptions模式下,当radius = 0 或者 color 的透明度为0时,无阴影效果。通过颜色渐变接口,可以设置组件的背景颜色渐变效果,实现在两个或多个指定的颜色之间进行平稳的过渡。

guangxishaoji的博客 523

鸿蒙系统(HarmonyOS)经典红色风格登录页布局

鸿蒙系统红色风格登录界面源码摘要 ,采用ArkTS语言实现。界面包含: 精美视觉效果 - 红色主色调搭配半透明背景、模糊效果和动态旋转动画 完整登录功能 - 支持用户名/密码登录和短信验证码(带60秒倒计时) 交互体验优化 - 输入框焦点动画、按钮状态反馈和表单验证提示 技术特点 - 使用ArkUI声明式开发、状态管理(@State)和响应式布局 适用于各类需要安全认证的移动应用场景,代码简洁高效,展现了鸿蒙原生开发的优秀特性。

前端开发-前端技术分享 1516

鸿蒙NEXT UI Design Kit:打造高端精致界面的新利器

UI Design Kit是华为提供的符合定义的UI界面开发套件集合。它包含HarmonyOS设计定义的扩展UI组件及其多样化的组件样式,丰富多样的UI界面场景下的光影效果,帮助应用实现与华为HarmonyOS多设备UI设计风格完美融合的界面。简单来说,UI Design Kit让开发者能够快速构建出符合HarmonyOS设计语言的高端精致界面,无需从零开始设计和实现每个UI组件。UI Design Kit提供了应用加载自定义Symbol的能力。

专注于移动开发的干货分享。提供高效解决方案、避坑指南与前沿技术解析。为开发者创造价值。 1131

基于eNSP的小型企业网络设计

在本次计算机网络课程设计中,围绕“小型企业网络搭建”这一主题,成功构建了一个高效、安全且易于管理的企业内部网络。通过本次课程设计,我们不仅掌握了小型企业网络搭建的关键技术和最佳实践,还培养了团队协作和问题解决的能力。本项目所构建的网络系统不仅满足了当前的业务需求,还具备良好的可扩展性和灵活性,为企业未来的数字化转型奠定了坚实的基础。

m0_67403143的博客 1442

Flutter在鸿蒙系统的Placeholder控件开发实践

在跨平台开发领域,Flutter框架通过其高性能的Skia渲染引擎和声明式UI编程范式,显著提升了移动应用的开发效率。Placeholder作为Flutter布局系统的核心组件,在页面加载过渡和布局验证中起着关键作用。其设计需遵循颜色对比度、描边精细度等视觉规范,同时结合鸿蒙系统的分布式特性,可实现多设备间的UI一致性。通过热重载技术和代码复用机制,开发者能快速构建适配不同鸿蒙设备的占位方案,有效管理用户预期并提升感知性能。本文深入解析Flutter Placeholder在鸿蒙平台的实现原理,涵盖从基础布

weixin_30899023的博客 225

RoCE Overlay

1. RoCE over vxlan 配置vxlan封装的RoCE流量,可以在PF switchdev模式下利用ovs bridge,或直接设置tc rules。下面将基于一对NIC互联的服务器介绍两种方式的使用,并分析封装后的数据包结构。 1.1. 基本配置 - VF与switchdev 首先创建VF,并为两个host设置PF的switchdev模式。使用ovs bridge或tc rules,...

sunshuying1010的博客 3063

鸿蒙API13开发【组件内容模糊】ArkTS组件

为当前组件添加内容模糊效果。

鸿蒙的技术博客 1099

深入解析set_input_delay:从理论到实践的关键时序约束

本文深入解析了FPGA/ASIC设计中关键的时序约束命令set_input_delay,从理论到实践详细阐述了其工作原理。文章重点讲解了如何结合setup time和hold time,通过计算-max与-min值来精确描述外部延迟,确保芯片内部逻辑能稳定捕获数据,并介绍了虚拟时钟、DDR接口约束等实战技巧与常见陷阱。

weixin_29313423的博客 317

第十四节《OpenCascade集成Qt》

将 OpenCascade 与 Qt 集成是开发图形界面应用的常见需求。通过将 OpenCascade 的几何建模与 Qt 的图形用户界面(GUI)功能结合,可以创建强大而灵活的 CAD 或建模工具。OpenCascade 提供了与 Qt 的集成接口,允许你在 Qt 应用程序中嵌入 OpenCascade 的视图,执行几何操作,并与用户进行交互。以下是 OpenCascade 与 Qt 集成的详细步骤:首先,确保已安装 OpenCascade 和 Qt。你可以从 OpenCascade 官方网站或通过包管理

yumeiguo的博客 597

Qt-for-鸿蒙PC HarmonyOS-图形效果实现实战

摘要 本项目基于Qt/QML框架和QtGraphicalEffects模块,实现了面向HarmonyOS平台的四种图形效果演示应用。主要功能包括:模糊效果(FastBlur)、透明效果(opacity)、黑色叠加效果(ColorOverlay)和阴影效果(DropShadow)。通过滑块实时调整效果参数,直观展示效果变化。技术实现上利用ShaderEffectSource提高性能,采用自适应布局适配不同设备。项目为HarmonyOS应用开发提供了实用的图形效果实现方案,优化了边缘处理和参数转换等实现细节,确

2301_77888392的博客 2万+

【DDR3 控制器设计】(1)MIG IP 核的详解与配置

2:1 比例的用户接口数据总线宽度是 MIG 内存接口宽度的 4 倍,比如 MIG 中配置的数据位宽是 16 位,而 DDR 双边采样,所以用户接口是 MIG 内存接口的 4 倍即数据位宽为 64 位,同理可以得到如果设置为 4:1 则是 8 倍的数据位宽即数据位宽为 128 位。这里选择不使用OFF。以下为 MIG 和 DDR 之间的连接框图,可以看到框图的左边是用户接口,中间是 MIG 核,右边是需要控制的 DDR 接口,用户只需要去配置使用 MIG 核,就可以对 DDR 进行控制读写等操作。

记录学习历程 5359
上一篇: 鸿蒙UI开发——渐变色效果
下一篇: 鸿蒙UI开发——组件裁剪与遮罩
鸿蒙自习室
博客等级 码龄2年 2083粉丝 144原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值