Android 는 초점 과 선택 에 의존 하지 않 는 TextView 주마등 을 구현 합 니 다.

머리말
 이전에 TextView 경마등 을 한 편 쓰 는 효과 가 있 었 는데 나중에 실제 프로젝트 에서 새로운 문제 가 발견 되 었 다.예 를 들 어 자동 으로 달 릴 수 없고 텍스트 가 표시 구역 을 초과 하면 캡 처 하 는 문제 가 있 었 다.오늘 은 사고방식 을 바 꾸 어 실현 하면 더욱 간단 하고 더욱 유용 하 다.
본문
        코드 구현:

public class MarqueeTextView extends TextView {

  /**        */
  private boolean mStopMarquee;
  private String mText;
  private float mCoordinateX;
  private float mTextWidth;

  public MarqueeTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public void setText(String text) {
    this.mText = text;
    mTextWidth = getPaint().measureText(mText);
    if (mHandler.hasMessages(0))
      mHandler.removeMessages(0);
    mHandler.sendEmptyMessageDelayed(0, 2000);
  }

  @Override
  protected void onAttachedToWindow() {
    mStopMarquee = false;
    if (!StringUtils.isEmpty(mText))
      mHandler.sendEmptyMessageDelayed(0, 2000);
    super.onAttachedToWindow();
  }

  @Override
  protected void onDetachedFromWindow() {
    mStopMarquee = true;
    if (mHandler.hasMessages(0))
      mHandler.removeMessages(0);
    super.onDetachedFromWindow();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (!StringUtils.isEmpty(mText))
      canvas.drawText(mText, mCoordinateX, 15, getPaint());
  }

  private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      switch (msg.what) {
      case 0:
        if (Math.abs(mCoordinateX) > (mTextWidth + 100)) {
          mCoordinateX = 0;
          invalidate();
          if (!mStopMarquee) {
            sendEmptyMessageDelayed(0, 2000);
          }
        } else {
          mCoordinateX -= 1;
          invalidate();
          if (!mStopMarquee) {
            sendEmptyMessageDelayed(0, 30);
          }
        }

        break;
      }
      super.handleMessage(msg);
    }
  };

}
코드 설명:
  1.2000 은 2 초 지연 으로 주마등 효 과 를 나타 낸다.
  2.mTextWidth+100 은 화면 에서 100 픽 셀 을 벗 어 나 다시 뛰 는 것 을 나타 낸다.
  3、30 밀리초 마다 1 픽 셀 이동
  4.원 리 는 간단 합 니 다.바로 정시 브러시 입 니 다.사용법 은 간단 합 니 다.setText 를 사용 하면 됩 니 다.시스템 과 같 지만 xml 의 값 을 설정 하여 직접 달 릴 수 없습니다.이것 은 스스로 수정 할 수 있 습 니 다.
  5.onDraw 를 주의 할 때 text 가 비어 있 는 지 여 부 를 판정 합 니 다.여 기 는 StringUtils.isEmpty 를 자신의 판정 방법 으로 바 꾸 면 됩 니 다.
안 드 로 이 드 가 주마등 을 실현 하 는 인 스 턴 스 코드 입 니 다.필요 한 친구 가 있 으 면 참고 하 세 요.

좋은 웹페이지 즐겨찾기