循环滚动TextView
import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.widget.TextView; public class SlideTextView extends TextView implements Runnable { private int currentScrollX; private boolean isStop = false; private int textWidth; private boolean isMeasure = false; public SlideTextView(Context context) { super(context); // TODO Auto-generated constructor stub } public SlideTextView(Context context, AttributeSet attrs) { super(context, attrs); } public SlideTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (!isMeasure) { getTextWidth(); isMeasure = true; } Log.d("", "wmz:textWidth=" + textWidth); } private void getTextWidth() { Paint paint = this.getPaint(); String str = this.getText().toString(); textWidth = (int) paint.measureText(str); } @Override public void run() { Log.d("", "wmz:run-currentScrollX="+currentScrollX); currentScrollX -= 1; scrollTo(currentScrollX, 0); if (isStop) { return; } if (getScrollX() <= -(this.getWidth())) { scrollTo(textWidth, 0); currentScrollX = textWidth; // return; } postDelayed(this, 50); } public void startScroll() { isStop = false; this.removeCallbacks(this); post(this); } public void stopScroll() { isStop = true; } public void startFor0() { currentScrollX = 0; startScroll(); } }
SlideTextView textView = (SlideTextView) findViewById(R.id.text_slide); textView.setText("123432432"); textView.startScroll();