今天要實現(xiàn)的一個效果是在Android中實現(xiàn)一個跑馬燈的效果:

創(chuàng)新互聯(lián)專注于雙橋企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,電子商務(wù)商城網(wǎng)站建設(shè)。雙橋網(wǎng)站建設(shè)公司,為雙橋等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
在新建一個Android product之后,在布局文件main中替換掉原來的TextView
代碼如下:
TextView
android:layout_width="60dp"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:text="這是跑馬燈的效果這是跑馬燈的效果"
/TextView
其他部分代碼不用改動,在模擬器上應(yīng)該可以看到滾動的顯示"這是跑馬燈的效果這是跑馬燈的效果"。
其中有幾個問題是我自己碰到的,列舉如下:
1.寬度android:layout_width不可以設(shè)置為wrap_content(自適應(yīng)內(nèi)容)
2.android:text最好是比較長的字符串,最少要長過自己設(shè)置的width大小(我這里是60dp)
3.顏色最好別設(shè)置為@android:color/white,否則你什么都看不到,因為背景顏色也是white
4.在xml中,TextView 的屬性
android:ellipsize = "end" 省略號在結(jié)尾
android:ellipsize = "start" 省略號在開頭
android:ellipsize = "middle" 省略號在中間
android:ellipsize = "marquee" 跑馬燈
5.android:scrollHorizontally="true"相信大家英文水平還不錯的話都明白這句的意思是水平滾動
6.android:marqueeRepeatLimit="marquee_forever" 看英文同樣可以明白,是無限次循環(huán),學(xué)習android,英文基礎(chǔ)還是必須的。
7.最后還有兩句代碼沒有解釋:
android:focusable="true" //讓TextView獲得焦點
android:focusableInTouchMode="true" //針對觸摸屏獲得當前焦點
事實上這兩句代碼我也了解不是特別多,在網(wǎng)上查了下這兩個屬性,目前理解為:
android:focusable="true"相當于當前Activity打開的時候,讓當前控件TextView獲得焦點,才可以實現(xiàn)滾動功能
android:focusableInTouchMode="true"和上述屬性應(yīng)該是類似的,但限制應(yīng)該是指的觸摸屏上的意思
對于這兩個屬性,希望有高人指點下。
跑馬燈相關(guān)屬性
上面方式1能暫時實現(xiàn)跑馬燈效果,但在多次點擊事件之后容易失焦。而且在Android4.4上實現(xiàn)有短暫停頓。
MarqueeTextView
MarqueeTextView
attrs.xml
使用
MarqueeView :可垂直跑、可水平跑的跑馬燈。
MarqueeViewLibrary :一個很方便使用和擴展的跑馬燈Library,通過提供不同的MarqueeFactory來定制不同的跑馬燈View, 并且提供了常用類型的跑馬燈效果:SimpleMarqueeView。
XML
設(shè)置字符串列表數(shù)據(jù),或者設(shè)置自定義的Model數(shù)據(jù)類型
設(shè)置字符串數(shù)據(jù)
設(shè)置事件監(jiān)聽
在 Activity 或 Fragment 中
在 ListView 或 RecyclerView 的 Adapter 中
Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時停止和啟動,而且還受焦點的影響蛋疼不已。由于項目需求需要用的可控制性高的跑馬燈效果,所以自己寫了一個自定義的TextView
注意:在布局文件引用本view時,paddingLeft,paddingRigh都必須為0dp,需要增加這兩個屬性的,大家可以自行修改代碼。
android:ellipsize="marquee"?android:singleLine="true"?這兩個屬性也要加上
public?class?MarqueeText?extends?TextView?implements?Runnable?{
private?int?currentScrollX;//?當前滾動的位置
private?boolean?isStop?=?false;
private?int?textWidth;
private?boolean?isMeasure?=?false;
public?MarqueeText(C
ontext?context)?{
super(context);
//?TODO?Auto-generated?constructor?stub
}
public?MarqueeText(Context?context,?AttributeSet?attrs)?{
super(context,?attrs);
}
public?MarqueeText(Context?context,?AttributeSet?attrs,?int?defStyle)?{
super(context,?attrs,?defStyle);
}
@Override
protected?void?onDraw(Canvas?canvas)?{
//?TODO?Auto-generated?method?stub
super.onDraw(canvas);
if?(!isMeasure)?{//?文字寬度只需獲取一次就可以了
getTextWidth();
isMeasure?=?true;
}
}
/**
*?獲取文字寬度
*/
private?void?getTextWidth()?{
Paint?paint?=?this.getPaint();
String?str?=?this.getText().toString();
textWidth?=?(int)?paint.measureText(str);
}
@Override
public?void?run()?{
currentScrollX?-=?2;//?滾動速度
scrollTo(currentScrollX,?0);
if?(isStop)?{
return;
}
if?(getScrollX()?=?-(this.getWidth()))?{
scrollTo(textWidth,?0);
currentScrollX?=?textWidth;
//????????????????????????return;
}
postDelayed(this,?5);
}
//?開始滾動
public?void?startScroll()?{
isStop?=?false;
this.removeCallbacks(this);
post(this);
}
//?停止?jié)L動
public?void?stopScroll()?{
isStop?=?true;
}
//?從頭開始滾動
public?void?startFor0()?{
currentScrollX?=?0;
startScroll();
}
}布局文件:
LinearLayout?xmlns:android=""
xmlns:tools=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"?
Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="start"
android:text="走起"?/
Button????????android:id="@+id/stop"????????android:layout_width="wrap_content"????????android:layout_height="wrap_content"????????android:onClick="stop"????????android:text="停止"?/????Button????????android:id="@+id/startfor0"????????android:layout_width="wrap_content"????????android:layout_height="wrap_content"????????android:onClick="startFor0"????????android:text="從頭開始"?/????simtice.demo.marqueetext.MarqueeText????????android:id="@+id/test"????????android:layout_width="fill_parent"????????android:layout_height="wrap_content"????????android:background="#339320"????????android:ellipsize="marquee"????????android:singleLine="true"????????android:text="這才是真正的文字跑馬燈效果這才是真正的字跑馬燈效果這才是真正的"????????android:textColor="#000000"????????android:textSize="20dp"?????/simtice.demo.marqueetext.MarqueeText/LinearLayoutMainActivitypublic?class?MainActivity?extends?Activity?{????????private?MarqueeText?test;????????@Override????????public?void?onCreate(Bundle?savedInstanceState)?{????????????????super.onCreate(savedInstanceState);????????????????setContentView(R.layout.activity_main);????????????????test?=?(MarqueeText)?this.findViewById(R.id.test);????????}????????public?void?start(View?v)?{????????????????test.startScroll();????????}????????public?void?stop(View?v)?{????????????????test.stopScroll();????????}????????public?void?startFor0(View?v){????????????????test.startFor0();????????}}
網(wǎng)頁名稱:android跑馬燈效果,安卓手機跑馬燈怎么設(shè)置
分享URL:http://chinadenli.net/article18/dsgddgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、全網(wǎng)營銷推廣、定制網(wǎng)站、網(wǎng)站營銷、Google、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)