北大青鸟光谷校区

北大青鸟光谷校区

  • 北大青鸟徐东校区
  • 北大青鸟光谷校区
  • 北大青鸟宏鹏IT校区
  • 荆州青鸟之家
  • 襄阳青鸟之家

15902769092

百日千才

安卓培训之Android自绘跑马灯控件

2012-09-26 16:06来源:武汉北大青鸟光谷校区作者:武汉宏鹏

      相信大家对android都不陌生,那么如何运用它呢?很多人都不是很了解,下面武汉北大青鸟武汉宏鹏光谷校区android培训技术将为大家讲到android的小运用,如何用android实现跑马灯控件。

  Android上实现一个简单的跑马灯控件,通过点击start or s

  import android.content.Context;

  import android.graphics.Canvas;

  import android.graphics.Paint;

  import android.os.Parcel;

  import android.os.Parcelable;

  import android.util.AttributeSet;

  import android.view.Display;

  import android.view.View;

  import android.view.WindowManager;

  import android.view.View.OnClickListener;

  import android.widget.TextView;

  /**

  * 单行文本跑马灯控件

  */

  public class MarqueeView extends TextView implements OnClickListener {

  public final static String TAG = MarqueeView.class.getSimpleName();

  private float textLength = 0f; // 文本长度

  private float viewWidth = 0f; //控件显示文字区域宽度

  private float step = 0f; // 文字的横坐标

  private float y = 0f; // 文字的纵坐标

  public boolean isStarting = true;// 是否开始滚动

  private Paint paint = null;// 绘图样式

  private String text = "";// 文本内容

  public MarqueeView(Context context) {

  super(context);

  initView();

  }

  public MarqueeView(Context context, AttributeSet attrs) {

  super(context, attrs);

  initView();

  }

  public MarqueeView(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 = 0;

  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);

  }

  public void writeToParcel(Parcel out, int flags) {

  super.writeToParcel(out, flags);

  out.writeBooleanArray(new boolean[] { isStarting });

  out.writeFloat(step);

  }

  public static final Parcelable.Creator CREATOR = 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 sScroll() {

  isStarting = false;

  invalidate();

  }

  @Override

  public void onDraw(Canvas canvas) {

  canvas.drawText(text, step, y, paint);

  if (!isStarting) {

  return;

  }

  step -= 0.8;

  if (step <= -textLength)

  step = viewWidth;

  invalidate();

  }

  @Override

  public void onClick(View v) {

  if (isStarting)

  sScroll();

  else

  startScroll();

  }

  }

        想了解更多android培训相关技术,请继续关注武汉北大青鸟官方网站,或咨询热线:15902769092。

关闭

只为了方便您就学 北大青鸟光谷校区 北大青鸟光谷校区

武汉市江夏区华泰街武昌理工学院对面

全真项目实战 入学签就业协议

Copyright (c) 2006-2021 武汉宏鹏教育咨询有限公司 版权所有 All Rights Reserved.