[android]利用動(dòng)畫實(shí)現(xiàn)view跑馬燈效果

該方法實(shí)現(xiàn)跑馬燈簡(jiǎn)單,Android框架自帶

最近接手一個(gè)項(xiàng)目終端機(jī)應(yīng)用項(xiàng)目,頂部的廣告條是可以滾動(dòng)的跑馬燈形式的文字

產(chǎn)品嫌棄這個(gè)跑馬燈太慢了,讓我調(diào)整一下速度

該跑馬燈是用原生的TextView實(shí)現(xiàn)的

android:singleLine="true"

android:ellipsize="marquee"

android:marqueeRepeatLimit="-1"

//需要獲取焦點(diǎn) 才可以正常工作

testTx.isSelected = true

再一番 探索之后發(fā)現(xiàn),原生的TextView? "marquee"模式,并不能調(diào)整速度

在網(wǎng)上搜索別人如何解決這個(gè)問題的,發(fā)現(xiàn)似乎不少人都遇到了,也有人寫了包裝好的自定義view,但是都過于復(fù)雜,需要不斷重新繪制,資源占用較高,甚至降低界面幀數(shù)

最近也在學(xué)習(xí)動(dòng)畫效果,遂自己用位移動(dòng)畫做一個(gè).自己動(dòng)手豐衣足食

下面上代碼:

第一步:

定義一個(gè)動(dòng)畫描述文件

\res\anim\marquee.xml

android:duration="3000"http://動(dòng)畫用時(shí),這個(gè)在代碼里面要改

android:fillAfter="false"

android:fillBefore="true"

android:fromXDelta="100%p"

android:fromYDelta="0"

android:interpolator="@android:anim/linear_interpolator"

android:repeatCount="-1"

android:repeatMode="restart"

android:toXDelta="-100%"

android:toYDelta="0%"


android:duration:動(dòng)畫持續(xù)時(shí)長(zhǎng)

android:fillAfter:動(dòng)畫結(jié)束之后是否保持動(dòng)畫的最終狀態(tài);true,表示保持動(dòng)畫的最終狀態(tài)

android:fillBefore:動(dòng)畫結(jié)束之后是否保持動(dòng)畫開始前的狀態(tài);true,表示恢復(fù)到動(dòng)畫開始前的狀態(tài)

android:fromXDelta:動(dòng)畫開始時(shí),在X軸方向上的位置;取值類型有三種:數(shù)字;百分比;百分比+”p”;?

數(shù)字:例如50.0,這里的單位是px像素

百分比:例如50%,這里是相對(duì)于自己控件寬度的百分比,實(shí)際的值是mIvImg.getWidth()*50%;

百分比+”p”:例如50%p,這里是表示相對(duì)于自己控件的父控件的百分比,

android:repeatCount:動(dòng)畫重復(fù)的次數(shù)。無限循環(huán)播放-1

android:repeatMode:動(dòng)畫重復(fù)的Mode,有reverse和restart兩種

android:startOffset:動(dòng)畫播放延遲時(shí)長(zhǎng),就是調(diào)用start之后延遲多少時(shí)間播放動(dòng)畫

android:toXDelta:動(dòng)畫移動(dòng)在X軸的目標(biāo)位置;取值類型和fromXDelta一樣

代碼:

helloTv是我要滾動(dòng)的textView,v是我定義的調(diào)節(jié)速度的常亮

private fun initMarquee() {

//重新測(cè)量hello的寬度

val w = helloTv.paint.measureText(helloTv.text.toString())

helloTv.layoutParams.width = w.toInt()

val animation = AnimationUtils.loadAnimation(this, R.anim.marquee).apply {

//定制相關(guān)屬性duration = (w * 10 / v).toLong()

}

helloTv.startAnimation(animation)

}

以上 就完成了,就是這么簡(jiǎn)單~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容