androidtextview跑馬燈
Ⅰ 如何讓TextView總是跑走馬燈效果
首先,使用TextView實現走馬燈形式的滾動顯示,只需要對其設置兩個屬性:
android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever"
但是,TextView的滾動顯示,有一個前提,TextView需要必須處於focus狀態。當TextView失去焦點的時候,TextView將會停止滾動。
Ⅱ android垂直TextView怎麼能讓它自動滾動
這是跑馬燈的效果。實現該功能步驟:
1、自定義Views,繼承自TextView。
2、重寫onDrow方法,計算每次的滾動的距離。
3、計算view的Y軸的重點,讓當前顯示的處於高亮顯示狀態。
4、定時的刷新View使其界面不斷的刷先,出現滾動的效果。
5、實現數據結構,將數據傳給view。
幾個步驟代碼可以參考下面
java">下面看看主要代碼:
1、創建一個類繼承TextView
/**
*@authorxushilin
*
*垂直滾動的TextViewWidget
*/
2、實現構造函數:
publicVerticalScrollTextView(Contextcontext){
super(context);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr){
super(context,attr);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr,inti){
super(context,attr,i);
init();
}
privatevoidinit(){
setFocusable(true);
//這里主要處理如果沒有傳入內容顯示的默認值
if(list==null){
list=newArrayList<Notice>();
Noticesen=newNotice(0,"暫時沒有通知公告");
list.add(0,sen);
}
//普通文字的字型大小,以及畫筆顏色的設置
mPaint=newPaint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(16);
mPaint.setColor(Color.BLACK);
mPaint.setTypeface(Typeface.SERIF);
//高亮文字的字型大小,以及畫筆顏色的設置
mPathPaint=newPaint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(16);
mPathPaint.setTypeface(Typeface.SANS_SERIF);
}
3、從寫onDraw方法,並計算文字的行距,並且將將普通文字和高亮文字,在這個方法中繪制出來
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paintp=mPaint;
Paintp2=mPathPaint;
p.setTextAlign(Paint.Align.CENTER);
if(index==-1)
return;
p2.setTextAlign(Paint.Align.CENTER);
canvas.drawText(list.get(index).getName(),mX,middleY,p2);
floattempY=middleY;
for(inti=index-1;i>=0;i--){
tempY=tempY-DY;
if(tempY<0){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
tempY=middleY;
for(inti=index+1;i<list.size();i++){
tempY=tempY+DY;
if(tempY>mY){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
}
4、計算Y軸中值以及更新索引
protectedvoidonSizeChanged(intw,inth,intow,intoh){
super.onSizeChanged(w,h,ow,oh);
mX=w*0.5f;
mY=h;
middleY=h*0.5f;
}
privatelongupdateIndex(intindex){
if(index==-1)
return-1;
this.index=index;
returnindex;
}
5、定時更新view,並將介面暴露給客戶程序調用。
publicvoipdateUI(){
newThread(newupdateThread()).start();
}
{
longtime=1000;
inti=0;
publicvoidrun(){
while(true){
longsleeptime=updateIndex(i);
time+=sleeptime;
mHandler.post(mUpdateResults);
if(sleeptime==-1)
return;
try{
Thread.sleep(time);
i++;
if(i==getList().size())
i=0;
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
HandlermHandler=newHandler();
RunnablemUpdateResults=newRunnable(){
publicvoidrun(){
invalidate();
}
};
6、xml布局文件中調用:
<?xmlversion="1.0"encoding="utf-8"?>
<!--.-->
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<com.demo.xsl.text.SampleView
android:id="@+id/sampleView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/selector"
/>
</LinearLayout>
7、java代碼中調用,傳遞數據:
packagecom.demo.xsl.text;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
{
SampleViewmSampleView;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSampleView=(SampleView)findViewById(R.id.sampleView1);
Listlst=newArrayList<Sentence>();
for(inti=0;i<30;i++){
if(i%2==0){
Sentencesen=newSentence(i,i+"、金球獎三甲揭曉C羅梅西哈維入圍");
lst.add(i,sen);
}else{
Sentencesen=newSentence(i,i+"、公牛欲用三大主力換魔獸?????");
lst.add(i,sen);
}
}
//給View傳遞數據
mSampleView.setList(lst);
//更新View
mSampleView.updateUI();
}
}
Ⅲ 誰知道在fragment中listview的item中的textview跑馬燈怎麼實現
TextView中有個ellipsize屬性,作用是當文字過長時,該控制項該如何顯示,解釋如下:
android:ellipsize=」start」—–省略號顯示在開頭
2.android:ellipsize=」end」——省略號顯示在結尾
3.android:ellipsize=」middle」—-省略號顯示在中間
4.android:ellipsize=」marquee」–以跑馬燈的方式顯示(動畫橫向移動)
文字左右滾動三個屬性:
android:singleLine="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
Android中我們為了實現文本的滾動可以在ScrollView中嵌入一個TextView,其實TextView自己也可以實現多行滾動的,畢竟ScrollView必須只能有一個直接的子類布局。只要在layout中簡單設置幾個屬性就可以輕松實現。
<TextView
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滾動條-->
android:singleLine="false" <!--實現多行-->
android:maxLines="15" <!--最多不超過15行-->
android:textColor="#FF0000"
/>
Ⅳ android textview 怎麼實現文字滾動
TextView實現文字滾動需要以下幾個要點:
1.文字長度長於可顯示範圍:android:singleLine="true"
2.設置可滾到,或顯示樣式:android:ellipsize="marquee"
3.TextView只有在獲取焦點後才會滾動顯示隱藏文字,因此需要在包中新建一個類,繼承TextView。重寫isFocused方法,這個方法默認行為是,如果TextView獲得焦點,方法返回true,失去焦點則返回false。跑馬燈效果估計也是用這個方法判斷是否獲得焦點,所以把它的返回值始終設置為true。ellipsize屬性
設置當文字過長時,該控制項該如何顯示。有如下值設置:」start」—–省略號顯示在開頭;」end」——省略號顯示在結尾;」middle」—-省略號顯示在中間;」marquee」 ——以跑馬燈的方式顯示(動畫橫向移動)marqueeRepeatLimit屬性
在ellipsize指定marquee的情況下,設置重復滾動的次數,當設置為marquee_forever時表示無限次。focusable屬性
能否獲得焦點,同樣focusableInTouchMode應該是滑動時能否獲得焦點
Ⅳ Android中實現TextView垂直滾動,像跑馬燈那樣,但是垂直的
要實現垂直滾動的,你可以用scrollview這個組件,不需要什麼代碼,只需要在xml文件,將textview嵌套進scrollview進去就行了。
<ScrollView android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView android:layout_width="wrap_content"
............//自己定義你的TextView組件
><TextView>
<ScrollView>
Ⅵ Android中TextView如何實現水平和垂直滾動
殤 殤雲的專欄 雲的專欄 軟體開發鋒顫 軟體開發 一 一、只想讓TextView顯示一行,但是文字超過 、只想讓TextView顯示一行,但是文字超過 在開頭顯示省略號 android:singleLine="true" android:ellipsize="start" 在結尾顯示省略號 android:singleLine="true" android:ellipsize="end" 在中間顯示省略號 android:singleLine="true" android:ellipsize="middle" 橫向自動滾動(跑馬燈效果)段裂 android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" 以上4個效果都要加上�0�2android:singleLine="true",因為TextView默認是會自動換行的 android:marqueeRepeatLimit="marquee_forever"是設置銀燃敗永遠重復,當然你也可以設置具體的數字 android:focusable="true"和android:focusableInTouchMode="true"一定要加上,不然滾動效果出不來在Java代碼中加入下面一句話就可以實現垂直滾動
Ⅶ android中怎樣實現圖片的跑馬燈效果
Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時停止和啟動,而且還受焦點的影響蛋疼不已。由於項目需求需要用的可控制性高的跑馬燈效果,所以自己寫了一個自定義的TextView
注意:在布局文件引用本view時,paddingLeft,paddingRigh都必須為0dp,需要增加這兩個屬性的,大家可以自行修改代碼。
android:ellipsize="marquee"android:singleLine="true"這兩個屬性也要加上
{
privateintcurrentScrollX;//當前滾動的位置
privatebooleanisStop=false;
privateinttextWidth;
privatebooleanisMeasure=false;
publicMarqueeText(C
ontextcontext){
super(context);
//TODOAuto-generatedconstructorstub
}
publicMarqueeText(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicMarqueeText(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}
@Override
protectedvoidonDraw(Canvascanvas){
//TODOAuto-generatedmethodstub
super.onDraw(canvas);
if(!isMeasure){//文字寬度只需獲取一次就可以了
getTextWidth();
isMeasure=true;
}
}/**
*獲取文字寬度
*/
privatevoidgetTextWidth(){
Paintpaint=this.getPaint();
Stringstr=this.getText().toString();
textWidth=(int)paint.measureText(str);
}
@Override
publicvoidrun(){
currentScrollX-=2;//滾動速度
scrollTo(currentScrollX,0);
if(isStop){
return;
}
if(getScrollX()<=-(this.getWidth())){
scrollTo(textWidth,0);
currentScrollX=textWidth;
//return;
}
postDelayed(this,5);
}
//開始滾動
publicvoidstartScroll(){
isStop=false;
this.removeCallbacks(this);
post(this);
}
//停止滾動
publicvoidstopScroll(){
isStop=true;
}
//從頭開始滾動
publicvoidstartFor0(){
currentScrollX=0;
startScroll();
}
}布局文件:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/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="走起"/>
<Buttonandroid:id="@+id/stop"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="stop"android:text="停止"/><Buttonandroid:id="@+id/startfor0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="startFor0"android:text="從頭開始"/><simtice.demo.marqueetext.MarqueeTextandroid: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></LinearLayout>{privateMarqueeTexttest;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);test=(MarqueeText)this.findViewById(R.id.test);}publicvoidstart(Viewv){test.startScroll();}publicvoidstop(Viewv){test.stopScroll();}publicvoidstartFor0(Viewv){test.startFor0();}}