作为个人的记录,不好用勿喷。
有个模块需要显示新闻消息,大量文本用textview上下循环滚动,百度搜的写法自己都不太满意,搞的复杂了,所以就想了个简单容易实现的方法。
核心:handler循环发消息,textview.scrollto(0,mPosition);
private TextView tv_content;
private int mPosition=1;
private Handler handler;
private Runnable animRun = new Runnable() {
@Override
public void run() {
float viewHeight = tv_content.getHeight();
float textHeight = tv_content.getPaint().getTextSize() * tv_content.getLineCount();
if (viewHeight > textHeight) { //textview高度大于文本高度,则不用循环。看个人需求
return;
}
if(mPosition>textHeight){ //如果播放完文本
mPosition = - viewHeight;//就从textview底部重来
}
tv_content.scrollTo(0,mPosition);
mPosition++;
handler.postDelayed(animRun, 50);
}
};
initview(){
handler = new Handler(Looper.myLooper());
handler.postDelayed(animRun,2000);
}