1. 程式人生 > >Android學習筆記——用ObjectAnimator平移動畫仿微信表情雨的簡單實現

Android學習筆記——用ObjectAnimator平移動畫仿微信表情雨的簡單實現

  最近需要實現類似微信聊天介面輸入文字命中關鍵字出現Emoji 表情雨的動畫效果,自己試著實現了一下,主要就是用 ObjectAnimatior 的 平移 動畫,用隨機函式控制每個Emoji 的 橫,縱座標和動畫持續時間,並且獲取螢幕寬度,高度做邊界限制。簡單做個學習筆記;

     首先,為了簡單明瞭,在佈局上新增一個觸發表情雨的按鈕,觸發事件你可以改;

DisplayMetrics dm = getResources().getDisplayMetrics();

        screenWidth = dm.widthPixels;

        screenHeight = dm.heightPixels;

        button = new Button(MainActivity.this);
        button.setText("Emoji Rain");
        layoutParams = new RelativeLayout.LayoutParams(dip2px(MainActivity.this, 320), dip2px(MainActivity.this, 60));
        layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
        relativeLayout.addView(button, 0, layoutParams);
 
    這段程式碼作用兩個,第一用 DisplayMertrics 獲取螢幕的寬度,高度;第二 new 一個 button 物件,並將這個button 新增到base佈局的底部,用於觸發表情雨;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                for(int i = 0; i< EMOJI_COUNT; i++){

                    addView();
                }

                for(int i = 0; i< EMOJI_COUNT; i++){

                    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(views.get(i), "translationY",
                                                      viewsY.get(i), (float)(screenHeight))
                                                      .setDuration(new Random().nextInt(2000) + 2000);
                    objectAnimator.start();
                }
            }
        });

   這段程式碼給觸發表情雨的button 添加了點選監聽事件,事件有兩個,第一,當button被點選時,呼叫addView方法新增EMOJI_COUNT這麼多的Emoji至螢幕上方不可見位置(有座標設定),類似賽跑前各位運動員在起跑線各就各位。。第二, 當所有Emoji新增至base佈局完成之後,就要為每個Emoji設定下落動畫,用的是ObjectAnimator.ofFloat()的縱座標平移動畫;在這裡需要特別配置的兩個引數分別是 1. 每個Emoji下落前的起始縱座標,我的demo裡給的範圍是 -90 到 -530。。。數字沒啥特殊含義,要保證Emoji在起始位置在使用者可視範圍之外,該範圍跨度也沒啥特殊含義,是用於處理每個Emoji下落的層次效果而設定的。。 

2. 每個Emoji下落的持續時間,因為每個Emoji的起始縱座標不一樣,為了保證每個Emoji的下落速度基本一致,所以設定了下落的持續時間在 2000ms 到 4000ms 之間;

  剩下的程式碼就是實現工具函式 dip2px(), addView();需要注意的就是在addView裡對每個Emoji設定屬性時,橫,縱座標需要隨機,並用之前獲取的螢幕寬,高限定邊界即可;程式碼如下:

    public static int dip2px(Context context, float dpValue){

        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public void addView(){

        view = new ImageView(MainActivity.this);
        view.setImageResource(R.drawable.ee_33);
        layoutParams  = new RelativeLayout.LayoutParams(90,90);
        relativeLayout.addView(view,1, layoutParams);
        view.setY(-(new Random().nextInt(440) + 90));
        view.setX(new Random().nextInt(screenWidth - dip2px(MainActivity.this, 100) - 10) + 10);
        view.setZ(new Random().nextInt(10) + 10);

        views.add(view);
        viewsY.add(view.getY());

    }


  效果如下:

  

相關推薦

Android學習筆記——ObjectAnimator平移動畫仿表情簡單實現

  最近需要實現類似微信聊天介面輸入文字命中關鍵字出現Emoji 表情雨的動畫效果,自己試著實現了一下,主要就是用 ObjectAnimatior 的 平移 動畫,用隨機函式控制每個Emoji 的 橫

android 仿表情下落!

block private www 事件觸發 dog ase 之間 apk ces 文章鏈接:https://mp.weixin.qq.com/s/yQXn-YjEFSW1X7A7CcuaVg 眾所周知,微信聊天中我們輸入一些關鍵詞會有表情雨下落,比如輸入「生日快樂」「

Android學習筆記(一)之仿正點鬧鐘時間齒輪滑動的效果

看到正點鬧鐘上的設定時間的滑動效果非常好看,自己就想做一個那樣的,在網上就開始搜資料了,看到網上有的齒輪效果的程式碼非常多,也非常難懂,我就決定自己研究一下,現在我就把我的研究成果分享給大家。我研究的這個效果出來了,而且程式碼也非常簡單,通俗易懂。效果圖如下: 首先是Ma

android學習筆記】activity間的通訊案例之高德地圖實現天氣查詢

【概述】app實現天氣查詢是再正常不過的功能了,又因為往往不止一個activity去獲取資料,那就想到封裝一個類,需要時去呼叫獲取即可。 【注】因為看文件還有點懵,故將自己抓腦寫的程式碼記錄下,以便查詢 【思路】activity傳送請求--獲取地址--根據地址獲取天氣

Python資料爬蟲學習筆記(13)爬取文章資料

一、需求:在微信搜尋網站中,通過設定搜尋關鍵詞以及搜尋頁面數,爬取出所有符合條件的微信文章: 二、搜尋頁URL分析階段: 1、在搜尋框中輸入任意關鍵詞,在出現的搜尋結果頁面點選下一頁,將每一頁的URL複製下來進行觀察: 2、注意到頁碼由page=X決定,搜尋關鍵

android仿表情輸入與鍵盤輸入詳解-解決跳閃與表情切換問題

private void unlockContentHeightDelayed() { mEditText.postDelayed(new Runnable() { @Override public void run() { ((LinearLa

Android UI 之自定義RadarView——高仿雷達掃描

最近看了一個視訊講了一種微信雷達掃描的實現方案,借鑑了一下,自己也寫一個玩玩,與大家分享一下。基本想出來三種解決方案,根據不同需求情況選擇即可。 方案一實現思路(通用): 1.自定義view  2.重寫onDraw()方法 3.畫四個無鋸齒空心圓 4.畫以最大圓為半徑的實心漸變圓 5.建立矩陣,旋轉畫布,

仿實時聊天簡單資料庫設計

  廢話不多說博主先上圖效果   此次實時聊天功能參考了資料,以及請教了師父給出設計,只設計了四張表,分別是,組表,組成員表,聊天記錄表,好友移除表。        這裡我先說下我的設計思路組表的意思和QQ 群一樣

仿的聯絡人列表實現

  之前一直覺得微信的聯絡人列表挺難實現的,無意中看了別人模仿微信的一個專案,看了一下他的聯絡人列表實現方式,參照他的思路,自己做了一個。其實聯絡人列表主要就是一個普通的listview,最關鍵的就是在item的佈局上面。Item佈局如下:<?xml version="

仿搖一搖實現播放音樂

搖一搖功能是使用手機加速度感測器來判斷是否處於搖一搖狀態,從而進行相應的操作 <1>將音樂檔案放在res/raw下,如果沒有raw,建立一個 <2>佈局檔案 <?xml version="1.0" encoding="ut

Android學習筆記-自定義仿支付寶ProgressBar動畫

最近開始學習自定義控制元件,看到支付寶支付的ProgressBar動畫感覺不錯,就學著也做一個這樣的ProgressBar。 首先看效果圖 原理:  一個執行緒無限改變進度畫弧形,當外部告知結束,通過判斷結果呈現成功或者失敗動畫,通過path座標緩慢變化就可以實現動畫效

Android學習筆記三:Intent串聯activity

conda data activity setresult result 意圖 prot 其他 cte 一:Intent Intent可以理解為 意圖。 我們可以通過創建intent實例來定義一個跳轉意圖,意圖包括:要跳轉到哪個頁面、需要傳遞什麽

emWin 學習筆記 —— VS2017打開emWin仿真包

默認 安全 工程文件 src 異常處理 圖片 com ini 選擇 使用VS2017打開emWin仿真包 解壓以後的仿真包目錄 SimulationTrial.sln 就是工程文件,直接使用VS2017打開即可 打開以後就是這樣子,不要急著編譯。直接編譯

Android學習筆記】屬性動畫基礎學習筆記

屬性動畫 屬性動畫系統是一個具有魯棒性的框架,允許你幾乎讓一切都動起來。你能夠定義一個動畫來隨著時間改變任何物件的任何屬性,無視該物件是否是畫在在螢幕上的。屬性動畫在指定的時間內改變屬性值(某個物件的某個屬性)。為了讓目標動起來,需要特別指明所要運動的目標的屬性,例如目標在螢幕上的位置,運動的時間長

Android學習筆記(四)之碎片化Fragment實現仿人人客戶端的側邊欄

    其實一種好的UI佈局,可以使使用者感到更加的親切與方便。最近非常流行的莫過於側邊欄了,其實我也做過很多側邊欄的應用,但是那些側邊欄的使用我都不是很滿意,現在重新整理,重新寫了一個相對來說我比較滿意的側邊欄,其中運用的就是android3.0版本之後新加的Fragme

Android學習筆記Android動畫特效

Android動畫特效 Android應用中各式各樣的互動介面能體現一個Android應用獨特的設計理念,為應用增色不少。為了要實現這些效果就需要用到Android中關於動畫的API,Android中的動畫效果主要分為逐幀動畫、補間動畫、屬性動畫。 逐幀動畫(Fram

Android學習筆記(八)--CoordinatorLayout的應用-仿支付寶介面

哈哈,差不多有一個禮拜沒有更新,去廣東那邊旅遊了四五天所以就沒有更新,接下來就要恢復正常了,又要開始學習了。今天帶來的是關於CoordinatorLayout的應用,模仿著支付寶做了一個介面,先看一下效果圖吧。 實現了和支付寶一樣的上滑收縮和變化的功能。核

Pro Android學習筆記(一三七):Home Screen Widgets(3):配置Activity

map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly

Android學習筆記-TextView(文本框)(二)

com ddc tel spanned extra pac 全部 con 平時 文章參考自:http://www.runoob.com/w3cnote/android-tutorial-textview.html 2.4 使用autoLink屬性識別鏈接類型 當文字中出

Android學習筆記-ImageView(圖像視圖)

尺寸 map 顯示 htm 通過 加載 內容 github bit 原文來自:http://www.runoob.com/w3cnote/android-tutorial-imageview.html 本節引言: 本節介紹的UI基礎控件是:ImageView(圖像視圖)