国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android基于TextView實現的跑馬燈效果實例

2020-04-11 10:45:29
字體:
來源:轉載
供稿:網友

本文實例講述了Android基于TextView實現的跑馬燈效果。分享給大家供大家參考,具體如下:

package sweet.venst.act;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Parcel;import android.os.Parcelable;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.Display;import android.view.View;import android.view.WindowManager;import android.view.View.MeasureSpec;import android.view.View.OnClickListener;import android.widget.TextView;public class AutoScrollTextView extends TextView { public final static String TAG = AutoScrollTextView.class.getSimpleName(); private float textLength = 0f;// 文本長度 private int viewWidth = 0; private int viewHight = 300; private float step = 0f;// 文字的橫坐標 private float y = 0f;// 文字的縱坐標 private float temp_view_plus_text_length = 0.0f;// 用于計算的臨時變量 private float temp_view_plus_two_text_length = 0.0f;// 用于計算的臨時變量 public boolean isStarting = false;// 是否開始滾動 private Paint paint = null;// 繪圖樣式 private String text = "";// 文本內容 public AutoScrollTextView(Context context) { super(context); } public AutoScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); } public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated method stub super.onMeasure(widthMeasureSpec, heightMeasureSpec); int measureWidth = measureWidth(widthMeasureSpec); int measureHight = measureHeight(heightMeasureSpec); // int measureWidth = 1024; // int measureHight = 300; viewWidth = measureWidth; viewHight = measureHight; setMeasuredDimension(viewWidth, viewHight); } private int measureWidth(int widthMeasureSpec) { int specMode = MeasureSpec.getMode(widthMeasureSpec); int specSize = MeasureSpec.getSize(widthMeasureSpec); if (specMode == MeasureSpec.UNSPECIFIED) {  return viewWidth; } else  {   return viewWidth;  } } private int measureHeight(int widthMeasureSpec) { int specMode = MeasureSpec.getMode(widthMeasureSpec); int specSize = MeasureSpec.getSize(widthMeasureSpec); if (specMode == MeasureSpec.UNSPECIFIED) {  return viewHight; } else {  return viewHight; } } public void setScrollText(String text) { this.text = text; inittextLength(text); // invalidate(); } public void init(Context cx) { paint = getPaint(); paint.setTextSize(40); paint.setColor(Color.WHITE); text = getText().toString(); textLength = paint.measureText(text); viewWidth = getWidth(); if (viewWidth == 0) {  DisplayMetrics dm = new DisplayMetrics();  dm = cx.getApplicationContext().getResources().getDisplayMetrics();  viewWidth = dm.widthPixels; } step = textLength; temp_view_plus_text_length = viewWidth + textLength; temp_view_plus_two_text_length = viewWidth + textLength * 2; y = getTextSize() + getPaddingTop(); } private void inittextLength(String text) { textLength = paint.measureText(text); step = textLength; temp_view_plus_text_length = viewWidth + textLength; temp_view_plus_two_text_length = viewWidth + textLength * 2; } @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.step = step; ss.isStarting = isStarting; return ss; } @Override public void onRestoreInstanceState(Parcelable state) { if (!(state instanceof SavedState)) {  super.onRestoreInstanceState(state);  return; } SavedState ss = (SavedState) state; super.onRestoreInstanceState(ss.getSuperState()); step = ss.step; isStarting = ss.isStarting; } public static class SavedState extends BaseSavedState { public boolean isStarting = false; public float step = 0.0f; SavedState(Parcelable superState) {  super(superState); } @Override public void writeToParcel(Parcel out, int flags) {  super.writeToParcel(out, flags);  out.writeBooleanArray(new boolean[] { isStarting });  out.writeFloat(step); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {  public SavedState[] newArray(int size) {  return new SavedState[size];  }  public SavedState createFromParcel(Parcel in) {  return new SavedState(in);  } }; private SavedState(Parcel in) {  super(in);  boolean[] b = null;  in.readBooleanArray(b);  if (b != null && b.length > 0)  isStarting = b[0];  step = in.readFloat(); } } public void startScroll() { isStarting = true; // invalidate(); } public void stopScroll() { isStarting = false; // invalidate(); } public void onDraw(Canvas canvas) { canvas.save(); canvas.drawText(text, temp_view_plus_text_length - step, y, paint); if (!isStarting) {  return; } step += 3.2;// 0.5為文字滾動速度。 if (step > temp_view_plus_two_text_length)  step = textLength; canvas.restore();// invalidate(); postInvalidate(); }}

更多關于Android相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武隆县| 宁河县| 阿鲁科尔沁旗| 漳平市| 木兰县| 佛教| 吴旗县| 乌拉特后旗| 炉霍县| 永寿县| 丰台区| 青阳县| 阿瓦提县| 弋阳县| 崇阳县| 正安县| 阳江市| 南投市| 甘南县| 宜良县| 柞水县| 和平区| 乌鲁木齐市| 长武县| 崇州市| 西乌| 武陟县| 六盘水市| 广饶县| 柳州市| 通道| 清镇市| 无极县| 鄂托克前旗| 青海省| 阿拉尔市| 天水市| 台东县| 射洪县| 永济市| 金昌市|