自定義簡單彈幕實現

MrBlue_Y發表於2017-11-12

最近專案需求實現一個簡單的聊天室彈幕效果,所以自己就手動寫了一個簡單的view,在這裡如果寫的不好,還望大神勿怪.

首先思路是: 類似彈幕這種 就是從左往右移動的效果,那麼就涉及到Android動畫裡面的TranslateAnimation

TranslateAnimation 詳解

這裡我們簡單介紹下,就當做回顧一下

         TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta);複製程式碼

由上面我們可以看出TranslateAnimation有四個引數

  float fromXDelta 動畫開始的點離當前View X座標上的差值 
  float toXDelta 動畫結束的點離當前View X座標上的差值 
  float fromYDelta 動畫開始的點離當前View Y座標上的差值 
  float toYDelta 動畫開始的點離當前View Y座標上的差值 

好吧,這樣解釋可能有點懵,那我們簡單舉個例子,fromXDelta就是你view初始的x座標,fromYDelta就是你初始的Y座標,
比如我的初始的位置是(0,0,0,0) ,我們想要向右移動10個單位,那麼移動後的就是(0,10,0,0)....複製程式碼

那麼我們要實現彈幕的效果,如何去思考怎樣去實現動畫呢?
一般的彈幕,都是從右向左逐漸消失,那麼我的x的座標的起點就是螢幕的寬度
這裡我們可以通過

 getResources().getDisplayMetrics().widthPixels複製程式碼

拿到我們螢幕的寬度 這個也就是我們的X座標,那麼要移動後的座標呢?我們會實現從右向左逐漸消失的過程,
所以我們移動後的x座標就是-getResources().getDisplayMetrics().widthPixels, 這裡有個思考為什麼不是 0 呢?

好了前期思路已經明瞭,接下來程式碼開工~~

首先我們寫一個VIEW 繼承RelativeLayout 或者LinearLayout 都可以

彈幕根據需求進行相應引數設定,比如行高 速度,以及相鄰彈幕出現的時間,又例如文字,顏色等一些設定,當然我們同樣可以在layout裡面進行設定.

下面主要是幾個主要方法,可以根據需求動態設定

初始化資料:

初始化彈幕:

彈幕移動動畫:

這裡就用到我們上面所講的TranslateAnimation moveSpeed引數可以設定彈幕的移動速度,這裡以後我們可以擴充套件很多的業務(比如,付費購買加速,減速等道具,或者變顏色等....哈哈哈)

開始彈幕:

這個就是啟動我們彈幕的方法

好了我們簡單的彈幕就封裝好了

接下來在我們需要的地方呼叫
setDatas方法即可..

實現效果如下:

大功告成,這個是個簡易的 非常適合小需求的,嘻嘻嘻~

下面是github的專案地址 有興趣的同學可以下載看下
github.com/luyaoY/DanM…

相關文章