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;i mY){ 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; } publicList getList(){ returnlist; } publicvoidsetList(List list){ 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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。