自定义AutoScrollTextView.java :
package com.example.datamodule.terminal; /** * Created by scq on 16-8-12. */ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Typeface; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.Display; import android.view.WindowManager; import android.widget.TextView; public class AutoScrollTextView extends TextView { 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 = "";//文本内容 private int mEffectNumber = 0; private boolean isChange = false; private boolean isOneRun = false; private boolean isTwoRun = false; private float stepTow = 0f; private SharedPreferenceTerminal mSharedPreferenceString; private String mTextContent; private int mTextSize; private float mSpeed; private int mEffect; private int mTextColor; private int mAlpha; private WindowManager mWindowManager; private Context mContext; public AutoScrollTextView(Context context) { this(context, null, 0); } public AutoScrollTextView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mContext = context.getApplicationContext(); mWindowManager = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); mSharedPreferenceString = new SharedPreferenceTerminal(context); mTextContent = mSharedPreferenceString.getTerminalScrollingContent(); mTextSize = mSharedPreferenceString.getTerminalScrollingFontSizeContent(); mSpeed = mSharedPreferenceString.getTerminalScrollingSpeedContent(); mEffect = mSharedPreferenceString.getTerminalScrollingEffectContent(); mTextColor = mSharedPreferenceString.getTerminalScrollingTextColorContent(); mAlpha = mSharedPreferenceString.getTerminalScrollingTransparency(); init(mWindowManager); if(mEffect == 0){ stopScroll(); }else if(mEffect == 9){ startScroll(); }else { startScroll(); } } public void init(WindowManager windowManager) { paint = getPaint(); text = mTextContent; setTextSize(mTextSize); if(mEffectNumber != 0){ mEffectNumber = 0; } paint.setColor(mTextColor); paint.setTypeface(Typeface.DEFAULT_BOLD); getBackground().setAlpha(mAlpha); textLength = paint.measureText(text); viewWidth = getWidth(); if(viewWidth == 0) { if(windowManager != null) { Display display = windowManager.getDefaultDisplay(); viewWidth = display.getWidth(); } } step = textLength; stepTow = 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; if(mEffectNumber != 0){ mEffectNumber = 0; } invalidate(); } public void stopScroll() { isStarting = false; if(mEffectNumber != 0){ mEffectNumber = 0; } invalidate(); } @Override public void onDraw(Canvas canvas) { if(!isStarting) { canvas.drawText(text, viewWidth/2 - textLength/2, y, paint); } else { canvas.drawText(text, temp_view_plus_text_length - step, y, paint); canvas.drawText(text, temp_view_plus_text_length - stepTow, y, paint); if(!isChange){ if(isTwoRun){ stepTow += mSpeed; if(stepTow > temp_view_plus_two_text_length){ stepTow = textLength; isTwoRun = false; isStopScroll(); } } step += mSpeed; if((textLength - getLeft() + (temp_view_plus_text_length - step)) <= viewWidth/3){ isChange = true; stepTow = textLength; isOneRun = true; } } else { if(isOneRun){ step += mSpeed; if(step > temp_view_plus_two_text_length){ step = textLength; isOneRun = false; isStopScroll(); } } stepTow += mSpeed; if((textLength - getLeft() + (temp_view_plus_text_length - stepTow)) <= viewWidth/3){ isChange = false; step = textLength; isTwoRun = true; } } } invalidate(); } public void isStopScroll(){ if(mEffect != 9 && mEffect != 0){ mEffectNumber ++; if(mEffectNumber >= mEffect){ stopScroll(); } } } }
保存数据 SharedPreferenceTerminal.java :
package com.example.datamodule.terminal; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; /** * Created by scq on 16-8-9. */ public class SharedPreferenceTerminal { private Context mContext; private SharedPreferences mySharedPreferences; private SharedPreferences.Editor mEditor; private String mTerminalNumber = "TerminalName"; private String mScrollingContent = "ScrollingContent"; private String mScrollingFontSize = "ScrollingFontSize"; private String mScrollingFontSizeNumber = "ScrollingFontSizeNumber"; private String mScrollingFontSizeContent = "ScrollingFontSizeContent"; private String mScrollingSpeed = "ScrollingSpeed"; private String mScrollingSpeedNumber = "ScrollingSpeedNumber"; private String mScrollingSpeedContent = "ScrollingSpeedContent"; private String mScrollingEffect = "ScrollingEffect"; private String mScrollingEffectNumber = "ScrollingEffectNumber"; private String mScrollingEffectContent = "ScrollingEffectContent"; private String mScrollingTextColor = "ScrollingTextColor"; private String mScrollingTextColorNumber = "ScrollingTextColorNumber"; private String mScrollingTextColorContent = "ScrollingTextColorContent"; private String mScrollingTransparency = "ScrollingTransparency"; private String mScrollingTransparencyContent = "ScrollingTransparencyContent"; /**创建SharedPreference**/ public SharedPreferenceTerminal(Context context){ mContext = context; mySharedPreferences = context.getSharedPreferences(mTerminalNumber, Activity.MODE_PRIVATE); } /**保存【滚动内容】**/ public void setEditorScrollingContent(String mName){//滚动内容 mEditor = mySharedPreferences.edit(); mEditor.putString(mScrollingContent, mName); mEditor.commit(); } /**读取【滚动内容】:name内容**/ public String getTerminalScrollingContent(){ return mySharedPreferences.getString(mScrollingContent, mContext.getResources().getString(R.string.action_text_content)); } /**保存【文字大小】**/ public void setEditorScrollingFontSize(String mName, int mNumber, int mSize){//文字大小 mEditor = mySharedPreferences.edit(); mEditor.putString(mScrollingFontSize, mName); mEditor.putInt(mScrollingFontSizeNumber, mNumber); mEditor.putInt(mScrollingFontSizeContent, mSize); mEditor.commit(); } /**读取【文字大小】:name内容**/ public String getTerminalScrollingFontSize(){ return mySharedPreferences.getString(mScrollingFontSize, mContext.getResources().getString(R.string.scrolling_fontsize_small)); } /**读取【文字大小】:列表默认位置**/ public int getTerminalScrollingFontSizeNumber(){ return mySharedPreferences.getInt(mScrollingFontSizeNumber, 0); } /**读取【文字大小】:设置的字体大小**/ public int getTerminalScrollingFontSizeContent(){ return mySharedPreferences.getInt(mScrollingFontSizeContent, 16); } /**保存【滚动速度】**/ public void setEditorScrollingSpeed(String mName, int mNumber, float mSpeed){//滚动速度 mEditor = mySharedPreferences.edit(); mEditor.putString(mScrollingSpeed, mName); mEditor.putInt(mScrollingSpeedNumber, mNumber); mEditor.putFloat(mScrollingSpeedContent, mSpeed); mEditor.commit(); } /**读取【滚动速度】:name内容**/ public String getTerminalScrollingSpeed(){ return mySharedPreferences.getString(mScrollingSpeed, mContext.getResources().getString(R.string.scrolling_speed_normal)); } /**读取【滚动速度】:列表默认位置**/ public int getTerminalScrollingSpeedNumber(){ return mySharedPreferences.getInt(mScrollingSpeedNumber, 1); } /**读取【滚动速度】:设置的字体滚动速度**/ public float getTerminalScrollingSpeedContent(){ return mySharedPreferences.getFloat(mScrollingSpeedContent, 2f); } /**保存【滚动效果】**/ public void setEditorScrollingEffect(String mName, int mNumber, int mEffect){//滚动效果 mEditor = mySharedPreferences.edit(); mEditor.putString(mScrollingEffect, mName); mEditor.putInt(mScrollingEffectNumber, mNumber); mEditor.putInt(mScrollingEffectContent, mEffect); mEditor.commit(); } /**读取【滚动效果】:name内容**/ public String getTerminalScrollingEffect(){ return mySharedPreferences.getString(mScrollingEffect, mContext.getResources().getString(R.string.scrolling_effect_continued)); } /**读取【滚动效果】:列表默认位置**/ public int getTerminalScrollingEffectNumber(){ return mySharedPreferences.getInt(mScrollingEffectNumber, 3); } /**读取【滚动效果】:设置的滚动效果**/ public int getTerminalScrollingEffectContent(){ return mySharedPreferences.getInt(mScrollingEffectContent, 9); } /**保存【文字颜色】**/ public void setScrollingTextColor(String mName, int mNumber, int mTextColor){//文字颜色 mEditor = mySharedPreferences.edit(); mEditor.putString(mScrollingTextColor, mName); mEditor.putInt(mScrollingTextColorNumber, mNumber); mEditor.putInt(mScrollingTextColorContent, mTextColor); mEditor.commit(); } /**读取【文字颜色】:name内容**/ public String getTerminalScrollingTextColor(){ return mySharedPreferences.getString(mScrollingTextColor, mContext.getResources().getString(R.string.scrolling_textcolor_black)); } /**读取【文字颜色】:列表默认位置**/ public int getTerminalScrollingTextColorNumber(){ return mySharedPreferences.getInt(mScrollingTextColorNumber, 4); } /**读取【文字颜色】:设置的字体颜色**/ public int getTerminalScrollingTextColorContent(){ return mySharedPreferences.getInt(mScrollingTextColorContent, 0xff000000); } /**保存【滚动背景透明度】**/ public void setScrollingTransparency(int mNumber, int mAlpha){//滚动背景透明度 mEditor = mySharedPreferences.edit(); mEditor.putInt(mScrollingTransparency, mNumber); mEditor.putInt(mScrollingTransparencyContent, mAlpha); mEditor.commit(); } /**读取【滚动背景透明度】:name内容**/ /**读取【滚动背景透明度】:列表默认位置**/ public int getTerminalScrollingTransparency(){ return mySharedPreferences.getInt(mScrollingTransparency, 255); } /**读取【滚动背景透明度】:设置的滚动背景透明度**/ public int getTerminalScrollingTransparencyContent(){ return mySharedPreferences.getInt(mScrollingTransparencyContent, 255); } /**清空数据**/ public void clearData(){ mEditor = mySharedPreferences.edit(); mEditor.clear(); mEditor.commit(); } }