Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android自繪跑馬燈控件

Android自繪跑馬燈控件

編輯:初級開發

android上實現一個簡單的跑馬燈控件,通過點擊start or stop



 

  1. import android.content.Context;
     
  2. import android.graphics.Canvas;
     
  3. import android.graphics.Paint;
     
  4. import android.os.Parcel;
     
  5. import android.os.Parcelable;
     
  6. import android.util.AttributeSet;
     
  7. import android.vIEw.Display;
     
  8. import android.view.VIEw;
     
  9. import android.vIEw.WindowManager;
     
  10. import android.view.VIEw.OnClickListener;
     
  11. import android.widget.TextVIEw;
     

  12.  
  13. /**
     
  14. * 單行文本跑馬燈控件
     
  15. */
     
  16. public class MarqueeView extends TextVIEw implements OnClickListener {
     
  17.         public final static String TAG = MarqueeVIEw.class.getSimpleName();
     
  18.         private float textLength = 0f;        // 文本長度
     
  19.         private float vIEwWidth = 0f;        //控件顯示文字區域寬度
     
  20.         private float step = 0f;                // 文字的橫坐標
     
  21.         private float y = 0f;                        // 文字的縱坐標
     
  22.         public boolean isStarting = true;// 是否開始滾動
     
  23.         private Paint paint = null;// 繪圖樣式
     
  24.         private String text = "";// 文本內容
     
  25.         
     
  26.         public MarqueeVIEw(Context context) {
     
  27.         super(context);
     
  28.         initVIEw();
     
  29.         }
     
  30.         
     
  31.         public MarqueeVIEw(Context context, AttributeSet attrs) {
     
  32.         super(context, attrs);
     
  33.         initVIEw();
     
  34.         }
     
  35.         
     
  36.         public MarqueeVIEw(Context context, AttributeSet attrs, int defStyle) {
     
  37.         super(context, attrs, defStyle);
     
  38.         initVIEw();
     
  39.         }
     
  40.         
     
  41.         /**
     
  42.          * 初始化控件
     
  43.          */
     
  44.         private void initVIEw() {
     
  45.         setOnClickListener(this);
     
  46.         }
     
  47.         
     
  48.         /**
     
  49.          * 文本初始化,每次更改文本內容或者文本效果等之後都需要重新初始化一下
     
  50.          */
     
  51.         public void init(WindowManager windowManager) {
     
  52.         paint = getPaint();
     
  53.         text = getText().toString();
     
  54.         textLength = paint.measureText(text);
     
  55.         vIEwWidth = getWidth();
     
  56.         if (vIEwWidth == 0) {
     
  57.             if (windowManager != null) {
     
  58.                 Display display = windowManager.getDefaultDisplay();
     
  59.                 vIEwWidth = display.getWidth();
     
  60.             }
     
  61.         }
     
  62.         step = 0;
     
  63.         y = getTextSize() + getPaddingTop();
     
  64.         }
     
  65.         
     
  66.         @Override
     
  67.         public Parcelable onSaveInstanceState() {
     
  68.         Parcelable superState = super.onSaveInstanceState();
     
  69.         SavedState ss = new SavedState(superState);
     
  70.         ss.step = step;
     
  71.         ss.isStarting = isStarting;
     
  72.         return ss;
     
  73.         }
     
  74.         
     
  75.         @Override
     
  76.         public void onRestoreInstanceState(Parcelable state) {
     
  77.         if (!(state instanceof SavedState)) {
     
  78.             super.onRestoreInstanceState(state);
     
  79.             return;
     
  80.         }
     
  81.         SavedState ss = (SavedState) state;
     
  82.         super.onRestoreInstanceState(ss.getSuperState());
     
  83.         step = ss.step;
     
  84.         isStarting = ss.isStarting;
     
  85.         }
     
  86.         
     
  87.         public static class SavedState extends BaseSavedState {
     
  88.         public boolean isStarting = false;
     
  89.         public float step = 0.0f;
     

  90.  
  91.         SavedState(Parcelable superState) {
     
  92.             super(superState);
     
  93.         }
     

  94.  
  95.         public void writeToParcel(Parcel out, int flags) {
     
  96.             super.writeToParcel(out, flags);
     
  97.             out.writeBooleanArray(new boolean[] { isStarting });
     
  98.             out.writeFloat(step);
     
  99.         }
     

  100.  
  101.         public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {
     

  102.  
  103.             public SavedState[] newArray(int size) {
     
  104.                 return new SavedState[size];
     
  105.             }
     

  106.  
  107.             @Override
     
  108.             public SavedState createFromParcel(Parcel in) {
     
  109.                 return new SavedState(in);
     
  110.             }
     
  111.         };
     

  112.  
  113.         private SavedState(Parcel in) {
     
  114.             super(in);
     
  115.             boolean[] b = null;
     
  116.             in.readBooleanArray(b);
     
  117.             if (b != null && b.length > 0)
     
  118.                     isStarting = b[0];
     
  119.             step = in.readFloat();
     
  120.         }
     
  121.         }
     
  122.         
     
  123.         /**
     
  124.          * 開始滾動
     
  125.          */
     
  126.         public void startScroll() {
     
  127.         isStarting = true;
     
  128.         invalidate();
     
  129.         }
     
  130.         
     
  131.         /**
     
  132.          * 停止滾動
     
  133.          */
     
  134.         public void stopScroll() {
     
  135.         isStarting = false;
     
  136.         invalidate();
     
  137.         }
     
  138.         
     
  139.         @Override
     
  140.         public void onDraw(Canvas canvas) {
     
  141.         canvas.drawText(text, step, y, paint);
     
  142.         if (!isStarting) {
     
  143.                 return;
     
  144.         }
     
  145.         step -= 0.8;
     
  146.         if (step <= -textLength)
     
  147.                 step = vIEwWidth;
     
  148.         invalidate();
     
  149.         }
     
  150.         
     
  151.         @Override
     
  152.         public void onClick(VIEw v) {
     
  153.         if (isStarting)
     
  154.             stopScroll();
     
  155.         else
     
  156.             startScroll();
     
  157.         }
     
  158. }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved