編輯:關於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.CreatorCREATOR = 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(); // // } }
private void getNotice() { // TODO Auto-generated method stub tv_notice.setText(文字); tv_notice.init(getWindowManager()); tv_notice.startScroll(); }
本文為大家演示了如何使用Chronometer控件實現Android計時器的實例。先貼上最終的實現效果圖:Android計時器實現思路使用Chronometer控件實現計
一、需要下載安裝的東西1. 文件下載網上也有挺多安裝教程的,這裡我提供我的安裝方法。Win10 64位。一些文件我在後面打包。2016.9.12號本人安裝記錄。SDK:
前言 Activity Transition: 提供了三種Transition類型: 進入:一個進入的過渡(動畫)決定activity中的所有的視圖怎麼進入屏
關於使用MarkDown編輯器的原因 其實前段時間就支持使用MarkDown編輯器來寫博客了,只是由於當時接觸過MarkDown,所以之前的博客都是使用默認的HTML編輯