【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效

【HarmonyOS 6】仿AI喚起屏幕邊緣流光特效

一、前言

最近在做 HarmonyOS 6.0 的適配,發現 Beta1版本里多了個很實用的視效功能——自帶背景的雙邊流光

之前做屏幕邊緣流光特效的時候,要么得自己寫漸變+動畫拼效果,要么就得套好幾個組件疊層,加上視頻或者lottie,調試起來特別麻煩。

現在用系統提供的 HdsVisualComponent 直接調用,參數配置好就能出效果,省了不少事兒。今天就把這個功能的實戰過程跟大家捋一捋,附上能直接跑的 Demo 代碼。

請添加圖片描述

二、先搞懂:這個功能到底能干嘛?

簡單說,這個自帶背景的雙邊流光是通過 HdsVisualComponent(通用視效組件)提供的場景接口實現的,核心能做兩件事:

1、控制兩條獨立的流光:每條流光都能設起始位置、終止位置和顏色,比如一條從左到右,一條從下到上,顏色還能不一樣;
2、疊加背景板顏色:背景可以是單色,也能搞漸變色(傳顏色數組就行),不用再額外套一個 Container 當背景;

之前自己寫的時候,光處理流光的“流動方向”和“背景不穿透”就踩了好幾個坑,現在系統把這些封裝成場景接口,直接傳參數就行,效率提升不是一點半點。

三、從導入到出效果,3步搞定

1、先導入必須的模塊

首先得把需要的組件和枚舉導入進來,不用記全,重點是這幾個

HdsVisualComponent:核心的視效組件,所有效果都靠它渲染

HdsSceneController:用來控制場景參數(比如流光位置、顏色)

HdsSceneType:
指定場景類型,這里必須用 DUAL_EDGE_FLOW_LIGHT_WITH_BACKGROUND_MASK(雙邊流光帶背景)

HdsVisualComponentAttribute:
可選,用來加更多屬性配置,基礎用法暫時用不上,但導入也不影響。

代碼如下,直接復制到頁面頂部就行:

import {HdsVisualComponent,HdsSceneController,HdsSceneType,// HdsVisualComponentAttribute // 基礎用法暫不啟用,注釋掉也能跑
} from '@kit.UIDesignKit';
// 別忘了導入Color,處理顏色用
import { Color } from '@ohos.ui';

2、初始化場景控制器,配置核心參數

接下來要創建 HdsSceneController 實例,關鍵是通過 setSceneParams 配置參數。這里得拎清楚每個參數的作用,不然效果可能跟預期不一樣:

參數名作用說明
backgroundMaskColors背景色,支持單色(傳一個顏色)或漸變色(傳多個顏色,比如 [綠, 紅] 就是紅綠漸變)
firstEdgeFlowLight第一條流光配置:startPos(起始位置)、endPos(終止位置)、color(流光顏色)
secondEdgeFlowLight第二條流光配置:參數跟第一條一樣,注意 startPos/endPos 可以正負值控制方向

這里有個小細節:
startPosendPos相對位置,范圍建議在 -1 到 1 之間。

正數代表“從組件起點向終點方向”(比如水平組件的從左到右),負數代表“從終點向起點方向”(比如從右到左)。

比如 endPos: 0.5 就是流光到組件中間位置停,endPos: -0.5 就是從中間往反方向延伸。

初始化代碼可以用 @State 裝飾器,方便后續動態修改參數(比如點擊改變顏色):

@State sceneController: HdsSceneController = new HdsSceneController().setSceneParams({// 背景用紅綠漸變,從綠到紅backgroundMaskColors: [Color.Green, Color.Red],// 第一條流光:從0位置開始,到中間(0.5)結束,紅色firstEdgeFlowLight: {startPos: 0,endPos: 0.5,color: Color.Red},// 第二條流光:從0位置開始,到反方向中間(-0.5)結束,綠色secondEdgeFlowLight: {startPos: 0,endPos: -0.5,color: Color.Green}});

3、渲染 HdsVisualComponent,綁定場景

最后一步就是在 build 里把 HdsVisualComponent 渲染出來,指定場景類型和控制器,再設好寬高(不然組件沒大小,看不到效果)。

這里建議用 Stack 包一下,方便后續疊加其他內容(比如文字、圖標)。比如做膠囊按鈕的話,就把文字放在 Stack 里,跟 HdsVisualComponent 疊在一起。

請添加圖片描述

基礎渲染代碼:

build() {Stack({ alignContent: Alignment.Center }) {// 雙邊流光組件:作為背景HdsVisualComponent()// 綁定場景類型和控制器,回調可選(成功渲染的提示).scene(HdsSceneType.DUAL_EDGE_FLOW_LIGHT_WITH_BACKGROUND_MASK,this.sceneController,() => {console.info('雙邊流光渲染成功!');})// 設寬高:100%寬,50%高(根據需求調整).width('100%').height('50%')// 圓角:模擬膠囊效果,可選.borderRadius(24)// 疊加文字:比如膠囊按鈕的文字Text('雙邊流光示例').fontSize(20).fontColor(Color.White).fontWeight(FontWeight.Bold)}.padding(20)
}

DEMO源碼:

這個功能從 6.0.0 (20) Beta1 開始支持,低于這個版本的設備會報錯,建議在使用前加版本判斷(比如用 deviceInfo.apiVersion 做兼容)。

上面的基礎版能看到效果,但實際開發中肯定需要交互(比如點擊改變流光顏色)。我把 Demo 改了下,做了個“點擊切換流光顏色”的膠囊按鈕,直接復制就能跑:

import {HdsVisualComponent,HdsSceneController,HdsSceneType
} from '@kit.UIDesignKit';
import { Color, FontWeight, Alignment } from '@ohos.ui';
import { Component, Entry, State, Stack, Text, TapGesture } from '@ohos.ui.components';@Entry
@Component
struct DualEdgeFlowLightDemo {// 用@State存顏色,方便點擊修改@State bgColors: Color[] = [Color('#2196F3'), Color('#9C27B0')]; // 初始背景:藍到紫@State firstFlowColor: Color = Color('#FFEB3B'); // 第一條流光:黃色@State secondFlowColor: Color = Color('#00E676'); // 第二條流光:綠色// 場景控制器:依賴顏色狀態,所以用getter動態更新get sceneController(): HdsSceneController {return new HdsSceneController().setSceneParams({backgroundMaskColors: this.bgColors,firstEdgeFlowLight: {startPos: 0,endPos: 0.6, // 第一條流光大半屏color: this.firstFlowColor},secondEdgeFlowLight: {startPos: 0,endPos: -0.6, // 第二條流光反方向大半屏color: this.secondFlowColor}});}build() {Stack({ alignContent: Alignment.Center }) {// 1. 雙邊流光背景HdsVisualComponent().scene(HdsSceneType.DUAL_EDGE_FLOW_LIGHT_WITH_BACKGROUND_MASK,this.sceneController,() => {console.info('流光渲染成功,點擊可切換顏色~');}).width('80%').height(56) // 膠囊按鈕高度,固定更美觀.borderRadius(28) // 圓角=高度/2,完美膠囊// 加點擊手勢:切換顏色.gesture(TapGesture().onAction(() => {// 點擊切換顏色:藍紫→紅綠,黃→紅,綠→黃this.bgColors = this.bgColors[0] === Color('#2196F3') ? [Color.Green, Color.Red] : [Color('#2196F3'), Color('#9C27B0')];this.firstFlowColor = this.firstFlowColor === Color('#FFEB3B') ? Color.Red : Color('#FFEB3B');this.secondFlowColor = this.secondFlowColor === Color('#00E676') ? Color('#FFEB3B') : Color('#00E676');}))// 2. 疊加按鈕文字Text('點擊切換流光顏色').fontSize(18).fontColor(Color.White).fontWeight(FontWeight.Bold)}.width('100%').height('100%').backgroundColor(Color('#F5F5F5')) // 頁面背景,突出膠囊}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95597.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95597.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95597.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跟做springboot尚品甄選項目

springbootvue3 【尚硅谷Java項目《尚品甄選》 SpringBootSpringCloud萌新學會企業級java項目】003.后臺系統-搭建前端環境(工程創建)_嗶哩嗶哩_bilibili E:\project\AllProJect\Shangpin Selection\項目材料素材\課件\尚品甄選項目課件 前端套用框架…

【Linux】創建線程

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 文章目錄 一、為什么需要線程? 創建線程 示例:計算斐波恩夕法 一、為什么需要線程? 在多核處理器的計算機上,線程可…

HTML應用指南:利用POST請求獲取全國九號電動車體驗店服務店位置信息

九號公司(Ninebot)作為全球領先的智能短途出行解決方案提供商,始終秉持“智慧移動,愉悅生活”的品牌理念,致力于為個人用戶打造安全、智能、時尚的城市出行體驗。依托“智能硬件 + 數字服務 + 線下觸點”三位一體的戰略布局,九號公司已建立起覆蓋全國、輻射全球的銷售與服…

Kafka面試精講 Day 4:Consumer消費者模型與消費組

【Kafka面試精講 Day 4】Consumer消費者模型與消費組 在“Kafka面試精講”系列的第四天,我們將深入探討Kafka的核心組件之一——Consumer消費者模型與消費組(Consumer Group)。這是Kafka實現高吞吐、可擴展消息消費的關鍵機制,也…

使用 Uni-app 打包 外鏈地址APK 及 iOS 注意事項

本文詳細介紹了如何使用 Uni-app 框架將項目打包為 Android APK 和 iOS 應用,重點講解了 minSdkVersion、targetSdkVersion 和 abiFilters 的配置,以及 iOS 開發的注意事項。文章還包含了您提供的 WebView 示例代碼,并提供了關鍵的注意事項&a…

異常處理小妙招——3.構造函數的安全第一原則:為什么不在構造函數中拋出異常?

文章目錄災難性的生日派對構造函數:對象的出生證明安全第一:嚴格的出生檢查為什么要在構造函數中嚴格驗證?1. 避免"僵尸對象"2. Fail-Fast(快速失敗)原則現實世界的實踐建議1. 使用工廠方法模式2. 使用Build…

iptables 和 ip route

文章目錄iptables原理及常用命令表鏈鏈表鏈表總結iptables 常用命令及參數1. 規則管理命令 (Commands)2. 規則匹配參數 (Rule-Specification - Matches)3. 目標動作參數 (Target)命令示例配置流程示例ip route常用命令iptables和ip route的聯系實用命令示例對比iptables原理及常…

RPC和HTTP的區別?

RPC和HTTP是兩種不同的通信協議,它們在通信方式、性能效率以及靈活性可擴展性等方面存在區別。以下是具體分析: 通信方式 RPC:RPC是基于遠程過程調用的二進制協議,它允許客戶端像調用本地函數一樣調用遠程服務器上的函數或方法[2]…

貝葉斯分類(Bayes Classify)

一. 核心思想貝葉斯分類是一類基于貝葉斯定理(Bayes Theorem)和概率統計的分類算法,核心思想是 “通過已知的先驗概率,結合數據的似然性,計算后驗概率,最終將樣本歸為后驗概率最高的類別”。它在機器學習、…

怎么熟悉業務,我是做前端的,但對業務了解沒有渠道

作為前端開發者,想深入了解業務但“沒有渠道”,這是非常普遍的痛點。很多前端同學只接到“切圖實現頁面”的任務,久而久之就成了“實現工具人”。但業務理解力,恰恰是區分“初級”和“高級”前端的核心分水嶺。 好消息是&#xff…

如何批量在PDF文檔最后一頁蓋章?

在面對上百份需要處理的 PDF 文檔時,逐個打開文檔蓋章再進行保存,這些步驟不僅提高我們工作的繁瑣,還容易導致處理位置錯誤或遺漏。那么怎么去將 PDF 文檔末頁實現批量自動打上電子印章?一般的方式沒有辦法來滿足我們高效率辦公的…

Keras/TensorFlow 中 `predict()` 函數詳細說明

Keras/TensorFlow 中 predict() 函數詳細說明 predict() 是 Keras/TensorFlow 中用于模型推理的核心方法,用于對輸入數據生成預測輸出。下面我將從多個維度全面介紹這個函數的用法和細節。 一、基礎語法和參數 基本形式 predictions model.predict(x,batch_sizeNon…

題解:UVA1589 象棋 Xiangqi

看到代碼別急著走,還要解釋呢!哈哈,知道這個題我是怎么來的嗎?和爸爸下象棋20場輸17場和2場QWQ于是乎我就想找到一個可以自動幫我下棋的程序,在洛谷上面搜索,就搜索到了這個題。很好奇UVA的為啥空間限制是0…

基于YOLOv11的腦卒中目標檢測及其完整數據集——推動智能醫療發展的新機遇!

在當今科技迅速發展的時代,腦卒中作為一種嚴重威脅人類健康的疾病,其早期的檢測和及時的干預顯得尤為重要。為此,本項目推出基于YOLOv11的腦卒中目標檢測系統,結合完整的數據集,不僅提高了檢測的效率,更為醫…

sed——Stream Editor流編輯器

文章目錄前言一、什么是sed二、sed的原理2.1 sed工作流程的三個步驟2.2 sed的兩個重要空間:2.3 sed的具體運作流程三、sed的常見用法3.1 sed的基本格式3.2 常用選項3.3 常用操作3.3.1 基本語法規則3.3.2 常用操作命令3.4 操作用法示例3.4.1 輸出符合條件的文本&…

Zotero白嫖騰訊云翻譯

Zotero白嫖騰訊云無限制字數翻譯 文章目錄Zotero白嫖騰訊云無限制字數翻譯1、安裝插件1、登錄騰訊云2、找到訪問管理進入3、創建一個子用戶4、啟用機器翻譯功能5、復制秘鑰6、設置到Zotero1、安裝插件 zotero-pdf-translate:https://github.com/windingwind/zotero…

TCP多進程和多線程并發服務

進程和線程的區別: 詳細的可以參考這樣文檔進程和線程的區別(超詳細)-CSDN博客 核心比喻 進程 一個工廠:這個工廠擁有獨立的資源(廠房、原材料、資金、電力)。每個工廠之間是相互隔離的,一個工廠著火…

計算機畢業設計springboot基于Java+Spring的疫苗接種管理系統的設計與實現 基于Spring Boot框架的疫苗接種信息管理系統開發與應用 Java與Spring技術驅動的疫苗接種管理

計算機畢業設計springboot基于JavaSpring的疫苗接種管理系統的設計與實現69geq9 (配套有源碼 程序 mysql數據庫 論文) 本套源碼可以在文本聯xi,先看具體系統功能演示視頻領取,可分享源碼參考。隨著信息技術的飛速發展,計算機技術在…

C/C++圣誕樹①

寫在前面 圣誕節將至,我總想用代碼做點什么,來表達對這個溫馨節日的敬意。于是,我決定用C語言在控制臺中繪制一幅充滿節日氣氛的圣誕樹畫面。它不僅有閃爍的雪花、五彩的燈光,還有一顆顆精心雕琢的心形圖案,仿佛把整個…

【小白入】顯示器核心參數對比度簡介

對比度是一個非常核心的顯示器參數。下面我們來了解一下。一、核心定義:什么是對比度?顯示器的對比度(Contrast Ratio)是指其最亮狀態(白色)與最暗狀態(黑色)之間的亮度比值。簡單來…