Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android跑馬燈效果

Android跑馬燈效果

編輯:關於Android編程

布局文件:

 

代碼:

 

AutoScrollTextView:

 

public class AutoScrollTextView extends TextView {
	public final static String TAG = AutoScrollTextView.class.getSimpleName();

	private float textLength = 0f;// 文本長度
	private float viewWidth = 0f;
	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);
		initView();
	}

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

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

	private void initView() {
		// setOnClickListener(this);
	}

	public void init(WindowManager windowManager) {
		paint = getPaint();
		text = getText().toString();
		textLength = paint.measureText(text);
		viewWidth = getWidth();
		if (viewWidth == 0) {
			if (windowManager != null) {
				Display display = windowManager.getDefaultDisplay();
				viewWidth = display.getWidth();
			}
		}
		step = textLength;
		temp_view_plus_text_length = viewWidth + textLength;
		temp_view_plus_two_text_length = viewWidth + textLength * 2;
		y = getTextSize() + getPaddingTop();
	}

	@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 CREATOR = new Parcelable.Creator() {

			public SavedState[] newArray(int size) {
				return new SavedState[size];
			}

			@Override
			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();
	}

	@Override
	public void onDraw(Canvas canvas) {

		if (!isStarting) {
			return;
		}
		canvas.drawText(text, temp_view_plus_text_length - step, y, paint);

		step += 2;// 文字滾動速度??
		if (step > temp_view_plus_two_text_length)
			step = textLength;
		invalidate();
	}

	// @Override
	// public void onClick(View v) {
	// if (isStarting)
	// stopScroll();
	// else
	// startScroll();
	//
	// }
}

MainActivity:

 

 

private void getNotice() {
		// TODO Auto-generated method stub
		tv_notice.setText(文字);
		tv_notice.init(getWindowManager());
		tv_notice.startScroll();
	}


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved