1. 程式人生 > >實現android之文字左右滾動

實現android之文字左右滾動

下面貼一下程式碼:

xml

 <com.example.masong_yuanchengdianbo.AutoScrollTextView
        android:layout_width="fill_parent"
        android:id="@+id/textView"
        android:textSize="15dip"
        android:layout_height="wrap_content"
        />


com.example.masong_yuanchengdianbo下程式碼:

public class AutoScrollTextView extends TextView {
	/** 文字長度 */
	private float textLength = 0f;
	/** 滾動條長度 */
	private float viewWidth = 0f;
	/** 文字x軸 的座標 */
	private float tx = 0f;
	/** 文字Y軸的座標 */
	private float ty = 0f;
	/** 文本當前長度 */
	private float temp_tx1 = 0.0f;
	/** 文本當前變換的長度 */
	private float temp_tx2 = 0x0f;
	/** 文字滾動開關 */
	private boolean isStarting = false;
	/** 畫筆物件 */
	private Paint paint = null;
	/** 顯示的文字 */
	private String text = "";

	public AutoScrollTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	/**
	 * 初始化自動滾動條,每次改變文字內容時,都需要重新初始化一次
	 * 
	 * @param windowManager
	 *            獲取螢幕
	 * @param text
	 *            顯示的內容
	 */
	public void initScrollTextView(WindowManager windowManager, String text) {
		// 得到畫筆,獲取父類的textPaint
		paint = this.getPaint();
		// 得到文字
		this.text = text;

		textLength = paint.measureText(text);// 獲得當前文字字串長度
		viewWidth = this.getWidth();// 獲取寬度return mRight - mLeft;
		if (viewWidth == 0) {
			if (windowManager != null) {
				// 獲取當前螢幕的屬性
				Display display = windowManager.getDefaultDisplay();
				viewWidth = display.getWidth();// 獲取螢幕寬度

			}
		}
		tx = textLength;
		temp_tx1 = viewWidth + textLength;
		temp_tx2 = viewWidth + textLength * 2;// 自己定義,文字變化多少
		// 文字的大小+距頂部的距離
		ty = this.getTextSize() + this.getPaddingTop();
	}

	/**
	 * 開始滾動
	 */
	public void starScroll() {
		// 開始滾動
		isStarting = true;
		this.invalidate();// 重新整理螢幕
	}

	/**
	 * 停止方法,停止滾動
	 */
	public void stopScroll() {
		// 停止滾動
		isStarting = false;
		this.invalidate();// 重新整理螢幕
	}

	/** 重寫onDraw方法 */
	@Override
	protected void onDraw(Canvas canvas) {
		if (isStarting) {
			// A-Alpha透明度/R-Read紅色/g-Green綠色/b-Blue藍色
			paint.setARGB(255, 200, 200, 200);
			canvas.drawText(text, temp_tx1 - tx, ty, paint);
			tx += 0.4;
			// 當文字滾動到螢幕的最左邊
			if (tx >= temp_tx2) {
				// 把文字設定到最右邊開始
				tx = temp_tx1 - viewWidth;
			}
			this.invalidate();// 重新整理螢幕
		}
		super.onDraw(canvas);
	}
}


主activity程式碼:

	autoScrollTextView = (AutoScrollTextView) findViewById(R.id.textView);
		
		String path = this.getIntent().getStringExtra("path");
		System.out.println("path = "+path);
		if(path!=null){
			autoScrollTextView.initScrollTextView(this.getWindowManager(),
					path);
			autoScrollTextView.starScroll();
		}else{
			autoScrollTextView.initScrollTextView(this.getWindowManager(),
					"歡迎使用遠端點播");
			autoScrollTextView.starScroll();
			
		}