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相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-09-21 16:00:03

Android基于TextView实现的跑马灯效果实例的相关文章

Android基于TextView实现的跑马灯效果实例_Android

本文实例讲述了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.InputStrea

android应用中用TextView实现跑马灯效果实例教程

如何实现两个TextView的跑马灯效果,如果使用常规的做法,只能够使一个TextView起作用. 现在方法具体如下: 1.为TextView增加四个属性 android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine="true" 实现TextView类,实现三个构造函数并重

跑马灯 remoteviews-RemoteViews 中包含一个TextView 怎样实现跑马灯效果

问题描述 RemoteViews 中包含一个TextView 怎样实现跑马灯效果 RemoteViews 中包含一个TextView 怎样实现跑马灯效果 具体代码如下: 配置文件: <TextView android:id="@+id/txt_trackinfo" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_a

基于JQuery实现的跑马灯效果(文字无缝向上翻动)_jquery

(function($){ $.fn.extend({ "slideUp":function(value){ var docthis = this; //默认参数 value=$.extend({ "li_h":"30", "time":2000, "movetime":1000 },value) //向上滑动动画 function autoani(){ $("li:first",doc

Android中使用TextView实现文字跑马灯效果

通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:

Android自定义View实现纵向跑马灯效果详解

首先看看效果图(录制的gif有点卡,真实的效果还是很流畅的) 实现思路 通过上面的gif图可以得出结论,其实它就是同时绘制两条文本信息,然后通过动画不断的改变两条文本信息距离顶部的高度,以此来实现滚动的效果. 具体实现 首先定义一些要用到的属性 <declare-styleable name="MarqueeViewStyle"> <attr name="textSize" format="dimension" /> &l

Android基于TextView实现跑马灯效果

本文实例为大家分享了Android TextView实现跑马灯效果的具体代码,供大家参考,具体内容如下 当Layout中只有一个TextView需要实现跑马灯效果时,操作如下. 在Layout的TextView配置文件中增加 android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" android:singleLine=&quo

android TextView实现跑马灯效果

本文实例为大家分享了android TextView跑马灯效果的具体代码,供大家参考,具体内容如下 一.要点 设置四个属性 android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:focusableInTouchMode="true" 直接在xml中使用 <TextView android:layout_

Android使用TextView跑马灯效果

老规矩,先上图看效果. 说明 TextView的跑马灯效果也就是指当你只想让TextView单行显示,可是文本内容却又超过一行时,自动从左往右慢慢滑动显示的效果就叫跑马灯效果. 其实,TextView实现跑马灯效果很简单,因为官方已经实现了,你只需要通过设置几个属性即可.而且,相关的资料其实网上也有一大堆了,之所以还写这篇博客出来是因为,网上好多人的博客都是只贴代码的啊,好一点的就是附带几张图片,可是这是动画效果啊,不动起来,谁知道跑马灯效果到底长什么样,到底是不是自己想要的效果啊(不会只有题主