Android实现歌词滚动效果
本文实例为大家分享了Android实现歌词滚动效果的具体代码,供大家参考,具体内容如下
自定义TextView
publicclassVerticalScrollTextViewextendsTextView{
privatePaintmPaint;
privatefloatmX;
privatePaintmPathPaint;
publicintindex=0;
privateListlist;
publicfloatmTouchHistoryY;
privateintmY;
privatefloatmiddleY;//
privatestaticfinalintDY=40;//
publicVerticalScrollTextView(Contextcontext){
super(context);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr){
super(context,attr);
init();
}
publicVerticalScrollTextView(Contextcontext,AttributeSetattr,inti){
super(context,attr,i);
init();
}
privatevoidinit(){
setFocusable(true);
if(list==null){
list=newArrayList();
Sentencesen=newSentence(0,"");
list.add(0,sen);
}
//
mPaint=newPaint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(24);
mPaint.setColor(Color.BLACK);
mPaint.setAlpha(80);
mPaint.setTypeface(Typeface.SERIF);
//
mPathPaint=newPaint();
mPathPaint.setAntiAlias(true);
mPathPaint.setColor(Color.RED);
mPathPaint.setTextSize(24);
mPathPaint.setTypeface(Typeface.SANS_SERIF);
}
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
canvas.drawColor(0xEFeffff);
Paintp=mPaint;
Paintp2=mPathPaint;
p.setTextAlign(Paint.Align.LEFT);
if(index==-1)
return;
p2.setTextAlign(Paint.Align.LEFT);
//
canvas.drawText(list.get(index).getName(),mX,middleY,p2);
floattempY=middleY;
//
for(inti=index-1;i>=0;i--){
tempY=tempY-DY;
if(tempY<0){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
tempY=middleY;
//
for(inti=index+1;imY){
break;
}
canvas.drawText(list.get(i).getName(),mX,tempY,p);
}
}
protectedvoidonSizeChanged(intw,inth,intow,intoh){
super.onSizeChanged(w,h,ow,oh);
mX=w*0.3f;
mY=h;
middleY=h*0.5f;
}
publiclongupdateIndex(intindex){
if(index==-1)
return-1;
this.index=index;
returnindex;
}
publicListgetList(){
returnlist;
}
publicvoidsetList(Listlist){
this.list=list;
}
publicvoidupdateUI(){
newThread(newupdateThread()).start();
}
classupdateThreadimplementsRunnable{
longtime=300;
inti=0;
publicvoidrun(){
while(true){
longsleeptime=updateIndex(i);
time+=sleeptime;
mHandler.post(mUpdateResults);
if(sleeptime==-1)
return;
try{
Thread.sleep(time);
i++;
if(i==getList().size())
{
i=0;
time=300;
}
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
HandlermHandler=newHandler();
RunnablemUpdateResults=newRunnable(){
publicvoidrun(){
invalidate();//
}
};
}
数据封装类
publicclassSentence{
privateStringname;
privateintindex;
publicSentence(intindex,Stringname){
this.name=name;
this.index=index;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetIndex(){
returnindex;
}
publicvoidsetIndex(intindex){
this.index=index;
}
}
布局
Activity代码
Listlst=newArrayList(); for(inti=0;i<8;i++){ if(i%2==0){ Sentencesen=newSentence(i,i+1+"NanJINGXIXI"); lst.add(i,sen); }else{ Sentencesen=newSentence(i,i+1+"Helloworld!"); lst.add(i,sen); } } play_textView.setList(lst); play_textView.updateUI();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。