1. 程式人生 > >android使用粒子動畫實現炊煙裊裊的效果

android使用粒子動畫實現炊煙裊裊的效果

很久以前,做了一個關於旅遊景區的專案,要求在等待頁面實現一個炊煙裊裊升起的效果,本來是沒有這個的,鬼知道我們的ios大神(坑貨)從哪找來的,我們專案經理一看非常滿意,要我們也加一個!(團隊有這樣的大神(坑貨)都是淚啊!!!)。

                                                          

(擦乾淚,該乾的還是要幹)首先看這個炊煙,從下往上不間斷的旋轉上升並且有顏色漸淡的效果,這裡至少用到了動畫的scale、rotato、alpha三種效果,但是再仔細看發現炊煙的運動軌跡是不規則的,所以使用補間動畫是不可能完成的,那麼就只有幀動畫了,但是我們可憐的ui不會做,於是問了下大神,結果順便甩過來一張圖片

   這個圖是白色的,調成灰色是為了和背景區分開

並且曰了句:“你搜一下粒子效果”。

於是乎,在我們所熟悉的view動畫和屬性動畫之外,我又發現了一項粒子動畫,粒子動畫在html和flash方面早有應用,專門用於處理一些包含顆粒狀圖形並且不規則運動的擬物動畫,包括雪花啦,雨滴啦,霧氣啦,煙花啦等等效果,在github上搜了半天,終於功夫不負有心人,找到了一個專門做粒子效果的庫http://plattysoft.github.io/Leonids/

這個粒子庫只有81kb,點此下載,而且使用起來非常方便,首先把下載下來的jar包放入lib中,然後在你工程的build.gradle中配置

dependencies {    compile 'com.plattysoft.leonids:LeonidsLib:1.3.1'}

在activity_main.xml中設定一個背景,在煙囪的位置設定一個view,

下面是程式碼部分,根據Leonids庫的官方文件來看粒子庫的可變性非常強,根據不同的方法所產生的效果也是千差萬別,所以在剔除所有的效果前,我們先從最主要的開始看

new ParticleSystem(this, 10000, R.mipmap.startup_smoke, 5000).emit(tvSmoke, 50);
反編譯後
public ParticleSystem(Activity a, int maxParticles, int drawableRedId, long timeToLive) {
    this
(a, maxParticles, a.getResources().getDrawable(drawableRedId), timeToLive, 16908290); }
第一個引數是activity,第二個是最多的粒子數,第三個是粒子的圖片資源,第四個是持續時間,毫秒制,預設持續時間結束後會從開始重複。
public void emit(View emiter, int particlesPerSecond) {
    this.emitWithGravity(emiter, 17, particlesPerSecond);
}
第一個引數為view,view的位置即為粒子效果產生的位置,當然後面還可以設定偏移量,第二個為每秒所產生的粒子數量,這個引數和持續時間的乘積不應當小於最多粒子數,否則動畫就會斷片。

下面是一些方法的探究

setAcceleration(float acceleration, int angle):規定了粒子運動的加速度和方向;

setRotationSpeedRange(float minRotationSpeed, float maxRotationSpeed):粒子運動的最小和最大的旋轉角度

setFadeOut(long duration):淡出的區間,預設從不透明到完全透明

setScaleRange(float minScale, float maxScale):縮放的區間,這與補間動畫類似

另外還有一個修飾器,可以對常用動畫進行修飾

addModifier(ParticleModifier modifier),可以修飾的動畫有:

  • AlphaModifier (int initialValue, int finalValue, long startMilis, long endMilis)
  • AlphaModifier (int initialValue, int finalValue, long startMilis, long endMilis, Interpolator interpolator)
  • ScaleModifier (float initialValue, float finalValue, long startMilis, long endMilis)
  • ScaleModifier (float initialValue, float finalValue, long startMilis, long endMilis, Interpolator interpolator)
除了上述當中的方法,jar包中還包含了其他的很多,實際當中,大家可以自行除錯就理解這些方法的用途和效果,這裡就不一一例舉了。

通過一系列的除錯,最終實現效果的程式碼如下

<span style="font-size:18px;">new ParticleSystem(this, 500, R.mipmap.startup_smoke, 5000)
        .setAcceleration(0.00003f, 270)
        .addModifier(new ScaleModifier(0, 1.2f, 1000, 4000))
        .setFadeOut(5000)
        .setRotationSpeedRange(0, 180)
        .emit(tvSmoke, 50);</span>


程式碼非常簡單,關鍵是在實際當中,大家要有耐心去探討,去除錯,這裡只是給出了例項,具體效果在不同的手機當中可能會有差異,大家根據實際情況自行除錯。

相關推薦

android使用粒子動畫實現炊煙裊裊效果

很久以前,做了一個關於旅遊景區的專案,要求在等待頁面實現一個炊煙裊裊升起的效果,本來是沒有這個的,鬼知道我們的ios大神(坑貨)從哪找來的,我們專案經理一看非常滿意,要我們也加一個!(團隊有這樣的大神(坑貨)都是淚啊!!!)。                        

Android ListView動畫實現方法

rri pan 自己 data- src def popu 動畫 onclick 在Android中listview是最經常使用的控件之中的一個,可是有時候我們會認為千篇一律的listview看起來過於單調,於是就產生了listView動畫,listview載入了動畫會

Shader頂點動畫實現波浪效果

首先要知道頂點函式中的一個頂點會包含以下資訊: float3型別的頂點法線方向 float3型別的頂點位置 甚至可能包含這個頂點的顏色資訊(float4型別,注意:匯入模型的預設材質不會顯示頂點顏色的,我們需要自己編寫一個著色器提取頂點顏色)   &nbs

Android動畫實現,防OOM,比原生動畫集節約超過十倍的資源

2015年專案接到一個需求,實現一個嚮導動畫,這個動畫一共六十張圖片,當時使用的是全志A33的開發(512的記憶體),通過使用Android的動畫集實現,效果特別卡頓,然後想到這種方式來實現,效果很流暢

Android啟動動畫實現

首先提一下實現機制:1.將manifest中launcher頁設為我們需要顯示的啟動頁面。2.在啟動動畫頁面中我們先載入我們需要的啟動頁面(動畫、文字、廣告等)。3.在啟動頁的activity中利用執行緒的postDelayed方法來延遲3s,3s後便執行跳轉到主介面或者登入

android通過shape實現虛線效果

shape資源 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.androi

Android-利用動畫實現背景逐漸變暗

前言 之前寫了一篇,介紹利用Handler動態改變背景透明度從而達到變暗的效果。現在補充一種方法,使用動畫來實現相同的效果。 ValueAnimator 和 Interpolator 今天的主角就是這倆,關於ValueAnimator和Interpol

利用Android屬性動畫實現Banner控制元件

AnimationBanner特點: 1.實現原理及使用都很簡單 2.可靈活設定Banner數量,1張或N張 3.附帶Indicator小圓點指示器,並自動聯動 4.可靈活設定Indicator指

android複雜動畫實現途徑

最近做一個太陽光旋轉,光掃字的動畫效果,前期試了用ProgressBar用旋轉動畫作為背景,能實現效果,但是旋轉有卡頓現象和功耗太高問題,因此考慮其他方式解決。總結了一下此類動畫的實現途徑包括一下幾個

Android粒子動畫Android粒子動畫渲染學習

填完自己挖的坑,把之前的遊戲繼續做下去,而做手機遊戲,在很多場景下需要做到絢爛效果,這時候就可能用到粒子,這裡學習一下其他大神的做法,自己做了個。 原理如下: 1.生成一個粒子(新建一個執行緒) 2.運動,按照一定軌跡運動 3.在某個位置,或時間點上釋放舊執行緒,並且生成新

Android屬性動畫實現TextView類似支付寶餘額數字滾動

Demo下載連結 專案中的小需求,完成類似於支付寶餘額的數字滾動效果,找了網上的一個小demo,再加上郭嬸的關於屬性動畫的文章,整理一部分程式碼分享給有需要的人. 下面貼出封裝的TextView程式碼片段,主要是利用屬性動畫來更新TextView完成數字滾動

Xamarin.android Activity動畫切換效果實現

omx over tails detail ons too ide xamarin Coding http://blog.csdn.net/esunshine1985/article/details/44302903 1.在Resources——values下新建sty

Android -- 自定義ViewGroup+貝塞爾+屬性動畫實現仿QQ點贊效果

private void init(final Context context) { mStarDrawable = new ArrayList<>(); mInterpolators = new ArrayList<>(); mSt

Android屬性動畫上手實現各種動畫效果,自定義動畫,拋物線等

在上一篇Android基礎動畫,組合動畫,幀動畫,佈局動畫,Activity跳轉動畫中我寫了基礎動畫的用法,那麼這次我們來看Android屬性動畫上手實現各種效果,包括實現基本的透明度,縮放,平

android 使用Path實現搜尋動態載入動畫效果

今天實現一個搜尋動態載入資料的動畫效果,還是先看效果吧,用文字描述乾巴巴的,看圖說話什麼都明白了, 實現這個就是使用Path中的getSegment()不斷的去改變它擷取片段的start和stop,再結合動畫,今天就分步驟實現它,看完以後你也會覺的不是很難,只是沒想到這麼

Android ObjectAnimator動畫效果實現

一、 ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f).setDuration(1000).start(); 第一個括號引數:圖片控制元件

Android學習之Android 5.0分享動畫實現微信點選全屏效果

Android5.0過渡動畫,請看 今天用分享動畫實現微信點選全屏效果 本文原始碼下載地址 peizhi 配置 build.gradle: compile 'com.android.support:recyclerview-v7:23.

Android超簡單實現listview上下拉伸回彈動畫效果

超簡單實現listview上下拉伸回彈動畫效果 希望能幫到大家,共同進步 import android.annotation.SuppressLint; import android.content.Context; import android.uti

動畫實現android app啟動介面的漸變效果

幾乎所有的app在啟動的時候都會有一個類似於開機畫面的東西,往往是一張圖片,上面寫著這個應用程式的提示文字,比如騰訊微博的啟動介面就是這樣的: 其實實現這種效果的原理很簡單,啟動介面也是一個activity,當時間到了之後銷燬這個activity,並啟動下一個a

android初學------使用ScaleAnimation 動畫實現放大縮小效果

Animation.RELATIVE_TO_SELF 自身為中心放大 或縮小 //縮小 ScaleAnimation animation_suofang =new ScaleAnimatio