Android自定义跑马灯文字效果
本文实例为大家分享了Android自定义跑马灯文字的具体代码,供大家参考,具体内容如下
Android跑马灯效果文字:
效果图(真实动画很流畅,这个转gif有问题,感觉有点卡):
代码:
/**
*Createdbywuguangliangon2018/12/21
*
*跑马灯效果文字
*/
publicclassMarqueeHorizontalTextViewextendsAppCompatTextView{
privatefloattextLength=0f;
privatefloatdrawTextX=0f;//文本的横坐标
publicbooleanisStarting=false;//是否开始滚动
privatePaintpaint=null;
privateStringtext="";
privatelongwaitTime=1000;//开始时等待的时间
privateintscrollTile=2;//文字的滚动速度
privateintbaseline;
publicMarqueeHorizontalTextView(Contextcontext){
super(context);
initView(context);
}
publicMarqueeHorizontalTextView(Contextcontext,AttributeSetattrs){
super(context,attrs);
initView(context);
}
publicMarqueeHorizontalTextView(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
initView(context);
}
privatevoidinitView(Contextcontext){
setMaxWidth(context.getResources().getDisplayMetrics().widthPixels/2);//因为需求需要所以设置了最大宽度,如果不需要此功能可以删除掉
paint=getPaint();
paint.setColor(getTextColors().getColorForState(getDrawableState(),0));
text=getText().toString();
if(TextUtils.isEmpty(text)){
return;
}
textLength=paint.measureText(text);
isStarting=true;
}
@Override
publicvoidsetTextColor(intcolor){
super.setTextColor(color);
paint.setColor(color);
start();
}
@Override
publicvoidsetText(CharSequencetext,BufferTypetype){
super.setText(text,type);
this.text=text.toString();
this.textLength=getPaint().measureText(text.toString());
drawTextX=0;
start();
}
publicvoidstart(){
isStarting=true;
invalidate();
}
publicvoidstop(){
isStarting=false;
invalidate();
}
@Override
publicvoidonDraw(Canvascanvas){
finalPaint.FontMetricsIntfontMetrics=paint.getFontMetricsInt();
baseline=(canvas.getHeight()-fontMetrics.bottom-fontMetrics.top)/2;
if(textLength<=canvas.getWidth()){
canvas.drawText(text,0,baseline,paint);
return;
}
canvas.drawText(text,-drawTextX,baseline,paint);
if(!isStarting){
return;
}
if(drawTextX==0){
postDelayed(()->{
drawTextX=1;
isStarting=true;
invalidate();
},waitTime);
isStarting=false;
return;
}
drawTextX+=scrollTile;
//判断是否滚动结束
if(drawTextX>textLength){
drawTextX=-canvas.getWidth();
}
invalidate();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。