自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自定義TextView跑馬燈效果實(shí)例教程

移動(dòng)開(kāi)發(fā) Android
Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時(shí)停止和啟動(dòng),而且還受焦點(diǎn)的影響蛋疼不已。由于項(xiàng)目需求需要用的可控制性高的跑馬燈效果,所以自己寫(xiě)了一個(gè)自定義的TextView,可控制啟動(dòng),停止,和速度。

注意:在布局文件引用本view時(shí),paddingLeft,paddingRigh都必須為0dp,需要增加這兩個(gè)屬性的,大家可以自行修改代碼。

android:ellipsize="marquee" android:singleLine="true" 這兩個(gè)屬性也要加上。

效果圖:

  1. public class MarqueeText extends TextView implements Runnable { 
  2.         private int currentScrollX;// 當(dāng)前滾動(dòng)的位置 
  3.         private boolean isStop = false
  4.         private int textWidth; 
  5.         private boolean isMeasure = false
  6.   
  7.         public MarqueeText(Context context) { 
  8.                 super(context); 
  9.                 // TODO Auto-generated constructor stub 
  10.         } 
  11.   
  12.         public MarqueeText(Context context, AttributeSet attrs) { 
  13.                 super(context, attrs); 
  14.         } 
  15.   
  16.         public MarqueeText(Context context, AttributeSet attrs, int defStyle) { 
  17.                 super(context, attrs, defStyle); 
  18.         } 
  19.   
  20.         @Override 
  21.         protected void onDraw(Canvas canvas) { 
  22.                 // TODO Auto-generated method stub 
  23.                 super.onDraw(canvas); 
  24.                 if (!isMeasure) {// 文字寬度只需獲取一次就可以了 
  25.                         getTextWidth(); 
  26.                         isMeasure = true
  27.                 } 
  28.         } 
  29.   
  30.         /** 
  31.          * 獲取文字寬度 
  32.          */ 
  33.         private void getTextWidth() { 
  34.                 Paint paint = this.getPaint(); 
  35.                 String str = this.getText().toString(); 
  36.                 textWidth = (int) paint.measureText(str); 
  37.         } 
  38.   
  39.         @Override 
  40.         public void run() { 
  41.                 currentScrollX -= 2;// 滾動(dòng)速度 
  42.                 scrollTo(currentScrollX, 0); 
  43.                 if (isStop) { 
  44.                         return
  45.                 } 
  46.                 if (getScrollX() <= -(this.getWidth())) { 
  47.                         scrollTo(textWidth, 0); 
  48.                         currentScrollX = textWidth; 
  49. //                        return; 
  50.                 } 
  51.                 postDelayed(this5); 
  52.         } 
  53.   
  54.         // 開(kāi)始滾動(dòng) 
  55.         public void startScroll() { 
  56.                 isStop = false
  57.                 this.removeCallbacks(this); 
  58.                 post(this); 
  59.         } 
  60.   
  61.         // 停止?jié)L動(dòng) 
  62.         public void stopScroll() { 
  63.                 isStop = true
  64.         } 
  65.   
  66.         // 從頭開(kāi)始滾動(dòng) 
  67.         public void startFor0() { 
  68.             currentScrollX = 0
  69.             startScroll(); 
  70.         } 

布局文件:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:tools="http://schemas.android.com/tools" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     android:orientation="vertical" > 
  6.   
  7.     <Button 
  8.         android:id="@+id/start" 
  9.         android:layout_width="wrap_content" 
  10.         android:layout_height="wrap_content" 
  11.         android:onClick="start" 
  12.         android:text="走起" /> 
  13.   
  14.     <Button 
  15.         android:id="@+id/stop" 
  16.         android:layout_width="wrap_content" 
  17.         android:layout_height="wrap_content" 
  18.         android:onClick="stop" 
  19.         android:text="停止" /> 
  20.   
  21.     <Button 
  22.         android:id="@+id/startfor0" 
  23.         android:layout_width="wrap_content" 
  24.         android:layout_height="wrap_content" 
  25.         android:onClick="startFor0" 
  26.         android:text="從頭開(kāi)始" /> 
  27.   
  28.     <simtice.demo.marqueetext.MarqueeText 
  29.         android:id="@+id/test" 
  30.         android:layout_width="fill_parent" 
  31.         android:layout_height="wrap_content" 
  32.         android:background="#339320" 
  33.         android:ellipsize="marquee" 
  34.         android:singleLine="true" 
  35.         android:text="這才是真正的文字跑馬燈效果這才是真正的字跑馬燈效果這才是真正的" 
  36.         android:textColor="#000000" 
  37.         android:textSize="20dp" > 
  38.     </simtice.demo.marqueetext.MarqueeText> 
  39.   
  40. </LinearLayout> 
MainActivity:
  1. public class MainActivity extends Activity { 
  2.         private MarqueeText test; 
  3.   
  4.         @Override 
  5.         public void onCreate(Bundle savedInstanceState) { 
  6.                 super.onCreate(savedInstanceState); 
  7.                 setContentView(R.layout.activity_main); 
  8.                 test = (MarqueeText) this.findViewById(R.id.test); 
  9.         } 
  10.   
  11.         public void start(View v) { 
  12.                 test.startScroll(); 
  13.         } 
  14.   
  15.         public void stop(View v) { 
  16.                 test.stopScroll(); 
  17.         } 
  18.         public void startFor0(View v){ 
  19.                 test.startFor0(); 
  20.         } 

 

責(zé)任編輯:徐川 來(lái)源: cnblogs
相關(guān)推薦

2015-08-07 15:45:02

swift跑馬燈源碼

2011-07-29 10:01:21

IOS 跑馬燈

2022-07-12 08:32:17

transition跑馬燈

2023-11-01 08:33:45

CSS動(dòng)畫(huà)效果

2009-09-18 11:44:05

Scala實(shí)例教程Kestrel

2010-09-14 16:47:23

SQL自定義函數(shù)

2014-08-26 11:46:46

QtAndroid實(shí)例教程

2010-09-10 14:33:32

SQL循環(huán)語(yǔ)句

2010-08-17 11:02:45

DIV CSS實(shí)例教程

2019-06-17 15:25:17

expandunexpandLinux

2010-09-14 16:59:39

SQL自定義函數(shù)

2025-04-14 09:35:00

2011-07-25 16:03:47

XCode 編譯

2011-06-20 16:03:03

Qt 控件 鼠標(biāo)

2013-01-04 16:17:33

Android開(kāi)發(fā)圖像特效圖像處理

2009-09-08 14:18:35

NFS服務(wù)器

2017-11-10 11:04:29

NVIDIA TITA處理器典藏版

2013-03-28 10:58:30

自定義Android界android

2013-01-06 10:43:54

Android開(kāi)發(fā)View特效

2021-09-14 15:13:18

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)