当前位置: 移动技术网 > IT编程>移动开发>Android > Android基于TextView实现的跑马灯效果实例

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

博狗bf88,农村丧事哭灵,东阳市信息港

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网