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 를 자신의 판정 방법 으로 바 꾸 면 됩 니 다.
안 드 로 이 드 가 주마등 을 실현 하 는 인 스 턴 스 코드 입 니 다.필요 한 친구 가 있 으 면 참고 하 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.