Android自定義View實現文字輪播效果

yayun0516發表於2017-06-04

文字輪播可以有效吸引使用者眼球,並且適用於一行文字顯示不下的場景,一些廣告都會採用這種方式。TextView自帶輪播屬性,除了使用這個屬性之外,本文采用了比較有意思的小演算法,通過自定義View的方式實現文字輪播效果。

自定義View程式碼如下:

package ad.scrolltextview;

import
android.content.Context;
import
android.graphics.Canvas;
import
android.graphics.Color;
import
android.graphics.Paint;
import
android.view.View;

/**
* Created by yayun on 2017/6/3.
* at 20:08
*/

public class ScrollTextView extends View {
private Paint paint;
   private int
x = 0;
   private
MyThread myThread;

   public
ScrollTextView(Context context) {
super(context);
       
init();
   
}

private void init() {
paint = new Paint();
       
paint.setTextSize(45);
       
paint.setColor(Color.RED);
       if
(myThread == null) {
myThread = new MyThread();
           
myThread.start();
       
}
}

@Override
   
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
       
canvas.drawText("YAYUN", x, 50, paint);
   
}

class MyThread extends Thread {
@Override
       
public void run() {
while (true) {
x ++;
               if
(x > getWidth()) {
x = (int) -paint.measureText("YAYUN");
               
}
postInvalidate();
               try
{
Thread.sleep(10);
               
} catch (InterruptedException e) {
e.printStackTrace();
               
}
}
}
}
}


程式碼很短,不到五十行,這裡僅僅是實現效果,為開發者提供思路,並沒有很好的考慮擴充性,讀者可自行重構程式碼。

實現輪播的原理主要是建立了一個執行緒,線上程中不斷動態改變x這一橫座標的值並呼叫postInvalidate方法來實現不斷重新整理繪製文字,注意,這裡為了保證文字滾動到末尾之後還可以從螢幕左邊滾動出來,對X值進行了判斷。

在MainActivity中引用這個自定義View,程式碼如下:

package ad.scrolltextview;

import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;

public class
MainActivity extends AppCompatActivity {

@Override
   
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
       
setContentView(new ScrollTextView(this));
   
}
}


執行例項如下:

 

 

 

 

 

可以通過調節X每次增長的值和執行緒睡眠的時間來控制輪播速度,調整程式碼如下:




如果您喜歡,請轉發至朋友圈,在此感謝。







相關文章