这里有新鲜出炉的精品教程,程序狗速度看过来!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。
这篇文章主要介绍了Android基于TextView实现的跑马灯效果,以完整实例形式分析了Android使用TextView通过属性设置及功能代码实现跑马灯效果的相关技巧,需要的朋友可以参考下
本文实例讲述了Android基于TextView实现的跑马灯效果。分享给大家供大家参考,具体如下:
- package sweet.venst.act;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.UnsupportedEncodingException;
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.os.Parcel;
- import android.os.Parcelable;
- import android.util.AttributeSet;
- import android.util.DisplayMetrics;
- import android.view.Display;
- import android.view.View;
- import android.view.WindowManager;
- import android.view.View.MeasureSpec;
- import android.view.View.OnClickListener;
- import android.widget.TextView;
- public class AutoScrollTextView extends TextView {
- public final static String TAG = AutoScrollTextView.class.getSimpleName();
- private float textLength = 0f; // 文本长度
- private int viewWidth = 0;
- private int viewHight = 300;
- 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);
- }
- public AutoScrollTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- // TODO Auto-generated method stub
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- int measureWidth = measureWidth(widthMeasureSpec);
- int measureHight = measureHeight(heightMeasureSpec);
- // int measureWidth = 1024;
- // int measureHight = 300;
- viewWidth = measureWidth;
- viewHight = measureHight;
- setMeasuredDimension(viewWidth, viewHight);
- }
- private int measureWidth(int widthMeasureSpec) {
- int specMode = MeasureSpec.getMode(widthMeasureSpec);
- int specSize = MeasureSpec.getSize(widthMeasureSpec);
- if (specMode == MeasureSpec.UNSPECIFIED) {
- return viewWidth;
- } else {
- return viewWidth;
- }
- }
- private int measureHeight(int widthMeasureSpec) {
- int specMode = MeasureSpec.getMode(widthMeasureSpec);
- int specSize = MeasureSpec.getSize(widthMeasureSpec);
- if (specMode == MeasureSpec.UNSPECIFIED) {
- return viewHight;
- } else {
- return viewHight;
- }
- }
- public void setScrollText(String text) {
- this.text = text;
- inittextLength(text);
- // invalidate();
- }
- public void init(Context cx) {
- paint = getPaint();
- paint.setTextSize(40);
- paint.setColor(Color.WHITE);
- text = getText().toString();
- textLength = paint.measureText(text);
- viewWidth = getWidth();
- if (viewWidth == 0) {
- DisplayMetrics dm = new DisplayMetrics();
- dm = cx.getApplicationContext().getResources().getDisplayMetrics();
- viewWidth = dm.widthPixels;
- }
- step = textLength;
- temp_view_plus_text_length = viewWidth + textLength;
- temp_view_plus_two_text_length = viewWidth + textLength * 2;
- y = getTextSize() + getPaddingTop();
- }
- private void inittextLength(String text) {
- textLength = paint.measureText(text);
- step = textLength;
- temp_view_plus_text_length = viewWidth + textLength;
- temp_view_plus_two_text_length = viewWidth + textLength * 2;
- }@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];
- }
- 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();
- }
- public void onDraw(Canvas canvas) {
- canvas.save();
- canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
- if (!isStarting) {
- return;
- }
- step += 3.2; // 0.5为文字滚动速度。
- if (step > temp_view_plus_two_text_length) step = textLength;
- canvas.restore();
- // invalidate();
- postInvalidate();
- }
- }
希望本文所述对大家Android程序设计有所帮助。
来源: http://www.phperz.com/article/17/0914/348914.html