成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS 鴻蒙開源第三方組件-表情雨EmojiRain

開源 OpenHarmony
這是一個特別小巧的鴻蒙掉emoji表情包實現。效果類似于微信中發送"生日快樂"和"么么噠"之類的詞語時觸發的動畫效果。

[[419734]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

背景

這是一個特別小巧的鴻蒙掉emoji表情包實現。效果類似于微信中發送"生日快樂"和"么么噠"之類的詞語時觸發的動畫效果。

功能展示

基于鴻蒙系統,通過自定義控件屬性方式實現了EmojiRain組件,同時支持java代碼設置。

【中軟國際】HarmonyOS 鴻蒙開源第三方組件-表情雨EmojiRain-鴻蒙HarmonyOS技術社區

原理解析

【中軟國際】HarmonyOS 鴻蒙開源第三方組件-表情雨EmojiRain-鴻蒙HarmonyOS技術社區

如圖所示,表情控件Image初始位置在屏幕的上方,EmojiRainLayout充滿整個屏幕。

表情包開始掉落前,從指定表情包集合中獲取對應元素,計算該元素本次掉落時的起始位置、終止位置、寬度、高度。

然后根據位置坐標及高度創建對應的動畫對象,設置Animator.CurveType.ACCELERATE_DECELERATE動畫插值器。

根據表情包掉落數量將Image元素準備完成后,通過調用addComponent()將Image添加到EmojiRainLayout上,達到覆蓋在屏幕上的效果。

最后執行先加速后減速的動畫效果,開啟表情雨模式。

  1. //使用rxjava控制動畫執行間隔、執行順序、執行對象 
  2.  Subscription subscription = Observable.interval(mDropFrequency, TimeUnit.MILLISECONDS) 
  3.             .take(mDuration / mDropFrequency) 
  4.             .flatMap(flow -> Observable.range(0, mEmojiPer)) 
  5.             .map(image -> mEmojiPool.acquire()) 
  6.             .filter(ep -> ep != null
  7.             .observeOn(OhosSchedulers.mainThread()) 
  8.             .subscribe(this::startDropAnimationForSingleEmoji, Throwable::printStackTrace); 
  9.         mSubscriptions.add(subscription); 
  10.  
  11. //為Image創建動畫對象 
  12.  AnimatorProperty animatorProperty = emoji.createAnimatorProperty(); 
  13.         //設置動畫執行時長 
  14.         animatorProperty.setDuration((int
  15.             (mDropAverageDuration * Randoms.floatAround(1, RELATIVE_DROP_DURATION_OFFSET))); 
  16.         float startX = Randoms.getStartX(); 
  17.         float endX = Randoms.getStopX(); 
  18.         //指定動畫開始的坐標及終止坐標 
  19.         animatorProperty.moveFromX(startX).moveToX(endX).moveFromY(-imageHeight).moveToY(mWindowHeight); 
  20.         animatorProperty.setCurveType(Animator.CurveType.ACCELERATE_DECELERATE); 
  21.         animatorProperty.start(); 
  22.  
  23.         //初始化Image,隨機賦予等比例縮放高度、寬度,指定圖片加載模式 
  24.         Image emoji = new Image(getContext()); 
  25.         emoji.setImageElement(emojiDrawable); 
  26.         emoji.setScaleMode(Image.ScaleMode.CENTER); 
  27.         double positive = Randoms.positiveGaussian() * 0.6; 
  28.         final int width = (int) (emoji_standard_size * (1.0 + positive)); 
  29.         final int height = (int) (emoji_standard_size * (1.0 + positive)); 
  30.         final LayoutConfig params = new LayoutConfig(width, height); 
  31.         params.setMarginTop(-height); 
  32.         params.setMarginLeft((int) (-0.5F * width)); 
  33.         emoji.setLayoutConfig(params); 

使用說明

參數配置

per

  • 每一波掉落的emoji個數,默認6個

duration

  • 掉落動畫持續的總時長,默認8000ms

dropDuration

  • 每個emoji掉落時長的平均值,默認2400ms

dropFrequency

  • 掉落頻率,即每兩撥的時間間隔,默認500ms

在layout中配置 EmojiRainLayout繼承自StackLayout,你完全可以把它當做原生的StackLayout使用。

  1. <com.luolc.emojirain.EmojiRainLayout 
  2.    xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  3.    xmlns:app="http://schemas.huawei.com/res/ohos-auto" 
  4.    xmlns:tools="http://schemas.android.com/tools" 
  5.    ohos:height="match_parent" 
  6.    ohos:width="match_parent" 
  7.    app:dropDuration="2400" 
  8.    app:dropFrequency="500" 
  9.    app:duration="7200" 
  10.    app:per="10"
  11.  
  12.    <Text 
  13.        ohos:height="match_content" 
  14.        ohos:width="match_content" 
  15.        ohos:text="Hello world!" /> 
  16.  
  17. </com.luolc.emojirain.EmojiRainLayout> 
  1. public class MainAbilitySlice extends AbilitySlice { 
  2.  
  3.     private EmojiRainLayout mContainer; 
  4.  
  5.     @Override 
  6.     protected void onStart(Intent intent) { 
  7.         super.onStart(intent); 
  8.         super.setUIContent(ResourceTable.Layout_ability_main); 
  9.  
  10.         // bind view 
  11.         mContainer = (EmojiRainLayout) findComponentById(ResourceTable.Id_group_emoji_container); 
  12.  
  13.         // add emoji sources 
  14.         mContainer.addEmoji(ResourceTable.Media_emoji_1_3); 
  15.         mContainer.addEmoji(ResourceTable.Media_emoji_2_3); 
  16.         mContainer.addEmoji(ResourceTable.Media_emoji_3_3); 
  17.         mContainer.addEmoji(ResourceTable.Media_emoji_4_3); 
  18.         mContainer.addEmoji(ResourceTable.Media_emoji_5_3); 
  19.  
  20.         // set emojis per flow, default 6 
  21.         mContainer.setPer(10); 
  22.  
  23.         // set total duration in milliseconds, default 8000 
  24.         mContainer.setDuration(7200); 
  25.  
  26.         // set average drop duration in milliseconds, default 2400 
  27.         mContainer.setDropDuration(2400); 
  28.  
  29.         // set drop frequency in milliseconds, default 500 
  30.         mContainer.setDropFrequency(500); 
  31.     } 

開始掉落

  1. mContainer.startDropping(); 

停止掉落

  1. mContainer.stopDropping(); 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-04-29 14:32:24

鴻蒙HarmonyOS應用

2021-03-10 15:03:40

鴻蒙HarmonyOS應用

2021-03-24 09:30:49

鴻蒙HarmonyOS應用

2021-08-03 10:07:41

鴻蒙HarmonyOS應用

2021-03-01 14:00:11

鴻蒙HarmonyOS應用

2021-03-03 09:42:26

鴻蒙HarmonyOS圖片裁剪

2021-07-06 18:21:31

鴻蒙HarmonyOS應用

2021-04-08 14:57:52

鴻蒙HarmonyOS應用

2021-04-20 15:06:42

鴻蒙HarmonyOS應用

2021-08-30 17:55:58

鴻蒙HarmonyOS應用

2021-08-05 15:06:30

鴻蒙HarmonyOS應用

2021-01-27 10:04:46

鴻蒙HarmonyOS動畫

2021-11-02 14:54:21

鴻蒙HarmonyOS應用

2021-11-17 15:37:43

鴻蒙HarmonyOS應用

2021-07-20 15:20:40

鴻蒙HarmonyOS應用

2021-04-15 17:47:38

鴻蒙HarmonyOS應用

2021-03-12 16:35:33

鴻蒙HarmonyOS應用

2021-08-10 15:23:08

鴻蒙HarmonyOS應用

2021-10-19 10:04:51

鴻蒙HarmonyOS應用

2021-06-29 09:28:16

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色精品 | 日韩视频在线一区 | 黄色永久免费 | av夜夜操| 日本偷偷操 | 99国产精品99久久久久久 | 天天综合永久 | 国产激情在线播放 | 国产精品99久久久久久久vr | 国产日韩欧美中文字幕 | 精品欧美一区二区三区久久久 | 毛片久久久 | 老熟女毛片 | 亚洲一区二区久久 | 日韩三极 | 久久久亚洲精品视频 | 中文字幕一区二区三区精彩视频 | 日批日韩在线观看 | 欧美乱码精品一区二区三区 | 男人的天堂中文字幕 | 日韩久久精品 | 久久新| 97色综合| 欧美精品一区二区在线观看 | 日韩精品a在线观看图片 | 麻豆精品久久久 | 国产精品久久国产精品 | 精品少妇一区二区三区日产乱码 | 亚洲精品久久久久中文字幕欢迎你 | 日本综合在线观看 | 国产一区二区自拍 | 欧美一区二区视频 | 久草新在线 | 精品免费国产一区二区三区四区 | 日韩在线大片 | 成人教育av | 欧美激情一区二区 | 日韩在线中文字幕 | 国产精品久久国产精品 | 亚洲视频免费在线观看 | 黄色片在线免费看 |