精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在OpenHarmony上實現彈性動效的方法

OpenHarmony技術社區 ? 來源:OST開源開發者 ? 2023-06-11 15:12 ? 次閱讀

在動畫開發場景中,經常用到彈性效果,尤其在拖拽某個對象時經常伴隨彈性動效。

OpenHarmony 提供了三種彈簧動畫曲線用來實現彈性效果,本例將為大家介紹這三種曲線的用法。

最終效果如下:

2b1ce6cc-0826-11ee-962d-dac502259ad0.gif

運行環境

本例基于以下環境開發,開發者也可以基于其他適配的版本進行開發:

IDE:DevEco Studio 3.1 Beta2

SDK:Ohos_sdk_public 3.2.11.9(API Version 9 Release)

實現思路

本例主要用到以下三種彈簧動畫曲線:

curves.springCurve:通過設置彈簧的初始速度、質量、剛度和阻尼來控制彈簧動畫的效果。對應本例中 springCurve 按鈕觸發的動畫。

curves.springMotion:通過設置彈簧震動時間和阻尼來控制彈簧動畫的效果。對應本例中 springMotion 按鈕觸發的動畫。

curves.responsiveSpringMotion:構造彈性跟手動畫曲線對象,是springMotion的一種特例,僅默認參數不同,可與 springMotion 混合使用。用來實現拖拽動畫。

開發步驟

①搭建 UI 框架

樣例中有兩個按鈕,一個圖片。內容整體縱向分布,兩個按鈕橫向分布。縱向布局可以采用 Column 組件,橫向布局可以采用 Row 組件。

代碼如下:

@Entry
@Component
structImageComponent{
build(){
Column(){
Row(){
Button('springCurve')
.margin({right:10})
.fontSize(20)
.backgroundColor('#18183C')
Button('springMotion')
.fontSize(20)
.backgroundColor('#18183C')
}
.margin({top:30})

Image($r("app.media.contact2"))
.width(100)
.height(100)
}.width("100%").height("100%").backgroundColor('#A4AE77')
}
}
②為 springCurve 按鈕添加 curves.springCurve 的曲線動畫。
...
//定義狀態變量translateY,用來控制笑臉圖像的位移
@StatetranslateY:number=0
...
Button('springCurve')
.margin({right:10})
.fontSize(20)
.backgroundColor('#18183C')
//綁定點擊事件
.onClick(()=>{
//在點擊事件中添加顯示動畫
animateTo({
duration:2000,
//設定curves.springCurve為動畫曲線
curve:curves.springCurve(100,10,80,10)
},
()=>{
//改變translateY的值,使笑臉圖像發生位移
this.translateY=-20
})
this.translateY=0
})
...
Image($r("app.media.contact2"))
.width(100)
.height(100)
//為笑臉圖像添加位移屬性,以translateY為參數
.translate({y:this.translateY})
...
效果如下:

2ba2ebdc-0826-11ee-962d-dac502259ad0.gif

③為 springMotion 按鈕添加 curves.springMotion 曲線動畫。

這里通過 position 屬性控制 springMotion 按鈕的移動,當然開發者也可以繼續選擇使用 translate 屬性。

...
//定義狀態變量translateY,用來控制笑臉圖像的位置變化
@StateimgPos:{
x:number,
y:number
}={x:125,y:400}
...
Button('springMotion')
.fontSize(20)
.backgroundColor('#18183C')
//綁定點擊事件
.onClick(()=>{
//在點擊事件中添加顯示動畫
animateTo({
duration:15,
//設定curves.springMotion為動畫曲線
curve:curves.springMotion(0.5,0.5),
onFinish:()=>{
animateTo({duration:500,
curve:curves.springMotion(0.5,0.5),},()=>{
//動畫結束時笑臉圖像位置還原
this.imgPos={x:125,y:400}
})
}
},()=>{
//改變笑臉圖像位置,y軸位置由400,變為150
this.imgPos={x:125,y:150}
})
})
...
Image($r("app.media.contact2"))
.width(100)
.height(100)
.translate({y:this.translateY})
//為笑臉圖像添加位置屬性,以imgPos為參數
.position(this.imgPos)
...
效果如下:

2be677f8-0826-11ee-962d-dac502259ad0.gif

④使用 curves.responsiveSpringMotion 為笑臉圖像添加拖拽動畫。
...
Image($r("app.media.contact2"))
.width(100)
.height(100)
.translate({y:this.translateY})
.position(this.imgPos)
//綁定觸摸事件
.onTouch((event:TouchEvent)=>{
//當觸摸放開時,笑臉圖像位置還原
if(event.type==TouchType.Up){
animateTo({
duration:50,
delay:0,
curve:curves.springMotion(),
onFinish:()=>{
}
},()=>{
this.imgPos={x:125,y:400}
})
}else{
//觸摸過程中觸發跟手動畫
animateTo({
duration:50,
delay:0,
//設定跟手動畫曲線
curve:curves.responsiveSpringMotion(),
onFinish:()=>{
}
},()=>{
//根據觸點位置改變笑臉圖像位置,從而實現跟手動畫
this.imgPos={
x:event.touches[0].screenX-100/2,
y:event.touches[0].screenY-100/2
}
})
}
})
...
效果如下:

2c0585f8-0826-11ee-962d-dac502259ad0.gif??

完整代碼

本例完整代碼如下:

importcurvesfrom'@ohos.curves';

@Entry
@Component
structImageComponent{
//定義狀態變量translateY,用來控制笑臉圖像的位移
@StatetranslateY:number=0
//定義狀態變量translateY,用來控制笑臉圖像的位置變化
@StateimgPos:{
x:number,
y:number
}={x:125,y:400}

build(){
Column(){
Row(){
Button('springCurve')
.margin({right:10})
.fontSize(20)
.backgroundColor('#18183C')
//綁定點擊事件
.onClick(()=>{
//在點擊事件中添加顯示動畫
animateTo({
duration:2000,
//設定curves.springCurve為動畫曲線
curve:curves.springCurve(100,10,80,10)
},
()=>{
//改變translateY的值,使笑臉圖像發生位移
this.translateY=-20
})
this.translateY=0
})
Button('springMotion')
.fontSize(20)
.backgroundColor('#18183C')
//綁定點擊事件
.onClick(()=>{
//在點擊事件中添加顯示動畫
animateTo({
duration:15,
//設定curves.springMotion為動畫曲線
curve:curves.springMotion(0.5,0.5),
onFinish:()=>{
animateTo({duration:500,
curve:curves.springMotion(0.5,0.5),},()=>{
//動畫結束時笑臉圖像位置還原
this.imgPos={x:125,y:400}
})
}
},()=>{
//改變笑臉圖像位置,y軸位置由400,變為150
this.imgPos={x:125,y:150}
})
})
}
.margin({top:30})

Image($r("app.media.contact2"))
.width(100)
.height(100)
//為笑臉圖像添加位移屬性,以translateY為參數
.translate({y:this.translateY})
//為笑臉圖像添加位置屬性,以imgPos為參數
.position(this.imgPos)
//綁定觸摸事件
.onTouch((event:TouchEvent)=>{
//當觸摸放開時,笑臉圖像位置還原
if(event.type==TouchType.Up){
animateTo({
duration:50,
delay:0,
curve:curves.springMotion(),
onFinish:()=>{
}
},()=>{
this.imgPos={x:125,y:400}
})
}else{
//觸摸過程中觸發跟手動畫,同樣通過animateTo實現動畫效果
animateTo({
duration:50,
delay:0,
//設定跟手動畫曲線
curve:curves.responsiveSpringMotion(),
onFinish:()=>{
}
},()=>{
//根據觸點位置改變笑臉圖像位置,從而實現跟手動畫
this.imgPos={
x:event.touches[0].screenX-100/2,
y:event.touches[0].screenY-100/2
}
})
}
})
}.width("100%").height("100%").backgroundColor('#A4AE77')
}
}



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 觸摸屏
    +關注

    關注

    42

    文章

    2290

    瀏覽量

    115999
  • OpenHarmony
    +關注

    關注

    25

    文章

    3661

    瀏覽量

    16159

原文標題:OpenHarmony上實現彈性動效

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    家庭、單位用電安全,需要“彈性范圍內、彈性連接”的接線端子

    出螺絲端部對導線的壓力0.549--1.16KN,實測的壓力數據35---90公斤之間,測試的工具與方法不同,數值會有偏差,從定性的角度說明壓力值還是比較大的。2、彈性范圍內的
    發表于 03-19 15:25

    設計的這些設計流程你知道嗎

    交互設計師想要認真和你聊聊設計
    發表于 02-25 06:39

    OpenHarmony 3.1 Beta版本關鍵特性解析——OpenHarmony圖形框架

    繪制與渲染流程解決了跨窗口聯動問題后,上面示例中桌面和壁紙模糊效果呈現時,也能同步看到壁紙的,如下:此外,OpenHarmony 圖形棧從時間和空間提供了更豐富的
    發表于 04-13 18:24

    為什么要在OpenHarmony設備安裝Dropbear呢

    HDC足夠大多數人的需求。但你如果更喜歡使用ssh協議,或者有更多高級需求例如基于網絡進行連接,支持密碼認證,提供安全可信的加密通道多臺開發機或設備同時連接OpenHarmony設備使用WinSCP
    發表于 05-23 17:45

    app圖標openharmony的源碼哪里實現的?

    openharmony點擊一個app圖標的之后,應用會從左上角一點點放大直至鋪滿屏幕;我想問一下這個openharmony的源碼
    發表于 06-10 11:01

    OpenHarmony 官網文檔有哪些新?上篇:應用開發文檔

    TS 語言并進行聲明式 UI 語法擴展,從組件、和狀態管理三個維度提供了 UI 繪制能力。UI 開發更接近自然語義的編程方式,讓開發者直觀地描述 UI 界面,不必關心框架如何實現 UI 繪制和渲染
    發表于 06-14 11:17

    網絡組件axios可以OpenHarmony使用了

    網絡組件axios可以OpenHarmony使用了什么是axios上古瀏覽器頁面向服務器請求數據時,因為返回的是整個頁面的數據,頁面都會強制刷新一下,這對于用戶來講并不是很友好。
    發表于 08-29 12:11

    開源圖形驅動OpenHarmony的使用和落地

    。 03?開源圖形驅動OpenHarmony的移植 OpenHarmony驅動框架支持多種接入模式,能夠實現南向硬件的快速部署。其中,
    發表于 08-31 18:07

    云計算彈性評測模型的研究與實現

    問題,從資源分配、QoS、資源配置時間等多個角度,對云計算的彈性進行較為全面的分析,提出適用于供應商和用戶兩個角度的評測方法已有基礎,提出資源分配、資源配置時間兩個方面的計算模型
    發表于 11-27 14:42 ?0次下載

    基于距離徙校正的彈速補償FPGA實現方法

    針對高速運動平臺彈速補償的實時性要求,基于距離徙校正(Range Cell Migration Compensation,RCMC) 的思想上提出了一種彈速補償的FPGA實現方法。
    發表于 03-30 09:56 ?2652次閱讀
    基于距離徙<b class='flag-5'>動</b>校正的彈速補償FPGA<b class='flag-5'>實現</b><b class='flag-5'>方法</b>

    華為圖像服務場景Java示例代碼

    簡介 場景服務提供基礎和高級,幫助您實現
    發表于 03-23 11:06 ?0次下載

    OpenHarmony生態論壇:支付終端OpenHarmony的安全框架

    OpenHarmony生態論壇:支付終端OpenHarmony的安全框架
    的頭像 發表于 04-25 17:29 ?1458次閱讀
    <b class='flag-5'>OpenHarmony</b>生態論壇:支付終端<b class='flag-5'>在</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的安全框架

    OpenHarmony生態論壇:UROVOOpenHarmony的規劃和實踐

    OpenHarmony生態論壇:UROVOOpenHarmony的規劃和實踐
    的頭像 發表于 04-25 17:33 ?1335次閱讀
    <b class='flag-5'>OpenHarmony</b>生態論壇:UROVO<b class='flag-5'>在</b><b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b>的規劃和實踐

    如何在OpenHarmony實現?翻頁呢?

    翻頁是應用開發中常見的場景,常見的如書籍翻頁、日歷翻頁等。
    的頭像 發表于 06-11 15:15 ?665次閱讀
    如何在<b class='flag-5'>OpenHarmony</b><b class='flag-5'>上</b><b class='flag-5'>實現</b>?翻頁<b class='flag-5'>動</b><b class='flag-5'>效</b>呢?

    OpenHarmony實戰開發-如何實現組件動畫。

    ArkUI為組件提供了通用的屬性動畫和轉場動畫能力的同時,還為一些組件提供了默認的動畫效果。例如,List的滑動動,Button的點擊,是組件自帶的默認動畫效果。組件默認動畫效
    的頭像 發表于 04-28 15:49 ?559次閱讀
    <b class='flag-5'>OpenHarmony</b>實戰開發-如何<b class='flag-5'>實現</b>組件動畫。