在需要的时候调用startscroll()方法 /** * Created by Administrator on 2017/9/25 0025. */ public class TurnTextView extends TextView implements Runnable{ private int currentScrollX;// 当前滚动的位置 private boolean isStop = false; private int textWidth; private boolean isMeasure = false; public TurnTextView(Context context) { super(context); } public TurnTextView(Context context, AttributeSet attrs) { super(context, attrs); } public TurnTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (!isMeasure) {// 文字宽度只需获取一次就可以了 getTextWidth(); isMeasure = true; } } private void getTextWidth() { //获取宽度 Paint paint = this.getPaint(); String str = this.getText().toString(); textWidth = (int) paint.measureText(str); } // 重写setText 在setText的时候重新计算text的宽度 @Override public void setText(CharSequence text, BufferType type) { super.setText(text, type); this.isMeasure = false; } @Override public boolean isFocused() { return true; } @Override public void run() { currentScrollX -= 2;// 滚动速度 scrollTo(currentScrollX, 0); if (isStop) { return; } if (getScrollX() <= -(this.getWidth())) { scrollTo(textWidth, 0); currentScrollX = textWidth; // return; } postDelayed(this, 5); } public void startScroll() { isStop = false; this.removeCallbacks(this); post(this); } // 停止滚动 public void stopScroll() { isStop = true; // textWidth=currentScrollX; //随时停止 } // 从头开始滚动 public void startFor0() { currentScrollX = 0; startScroll(); } }
textview左右滚动
最新推荐文章于 2024-08-07 10:49:44 发布