码迷,mamicode.com
首页 > 移动开发 > 详细

Android跑马灯效果

时间:2014-12-05 14:20:34      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:layout   textview   canvas   

布局文件:

<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="60dip" >

        <com.example.guanggao.AutoScrollTextView
            android:id="@+id/tv_notice"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:textSize="25sp" />
    </LinearLayout>

代码:

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

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


Android跑马灯效果

标签:layout   textview   canvas   

原文地址:http://blog.csdn.net/zhangjiaming8889/article/details/41746259

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!