android开发分享Android实现歌词滚动效果

本文实例为大家分享了android实现歌词滚动效果的具体代码,供大家参考,具体内容如下 自定义textview public class verticalscr

android开发分享Android实现歌词滚动效果实例为大家分享了android实现歌词滚动效果的具体代码,供大家参考,具体内容如下

自定义textview

  public class verticalscrolltextview extends textview {   private paint mpaint;   private float mx;   private paint mpathpaint;    public int index = 0;   private list<sentence> list;   public float mtouchhistoryy;   private int my;    private float middley;//   private static final int dy = 40; //   public verticalscrolltextview(context context) {    super(context);    init();   }   public verticalscrolltextview(context context, attributeset attr) {    super(context, attr);    init();   }   public verticalscrolltextview(context context, attributeset attr, int i) {    super(context, attr, i);    init();   }   private void init() {    setfocusable(true);    if(list==null){     list=new arraylist<sentence>();     sentence sen=new sentence(0," ");     list.add(0, sen);    }        //     mpaint = new paint();    mpaint.setantialias(true);    mpaint.settextsize(24);    mpaint.setcolor(color.black);    mpaint.setalpha(80);    mpaint.settypeface(typeface.serif);      //     mpathpaint = new paint();    mpathpaint.setantialias(true);    mpathpaint.setcolor(color.red);    mpathpaint.settextsize(24);    mpathpaint.settypeface(typeface.sans_serif);   }   protected void ondraw(canvas canvas) {    super.ondraw(canvas);    canvas.drawcolor(0xefeffff);    paint p = mpaint;    paint p2 = mpathpaint;    p.settextalign(paint.align.left);    if (index == -1)     return;    p2.settextalign(paint.align.left);    //     canvas.drawtext(list.get(index).getname(), mx, middley, p2);    float tempy = middley;    //     for (int i = index - 1; i >= 0; i--) {        tempy = tempy - dy;     if (tempy < 0) {      break;     }     canvas.drawtext(list.get(i).getname(), mx, tempy, p);       }    tempy = middley;    //    for (int i = index + 1; i < list.size(); i++) {     //      tempy = tempy + dy;     if (tempy > my) {      break;     }     canvas.drawtext(list.get(i).getname(), mx, tempy, p);       }   }   protected void onsizechanged(int w, int h, int ow, int oh) {    super.onsizechanged(w, h, ow, oh);    mx = w * 0.3f;     my = h;    middley = h * 0.5f;   }     public long updateindex(int index) {     if (index == -1)     return -1;    this.index=index;      return index;   }     public list<sentence> getlist() {    return list;   }     public void setlist(list<sentence> list) {    this.list = list;   }   public void updateui(){    new thread(new updatethread()).start();   }   class updatethread implements runnable {    long time = 300;     int i=0;    public void run() {     while (true) {      long sleeptime = 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 (interruptedexception e) {            e.printstacktrace();      }     }    }   }   handler mhandler = new handler();   runnable mupdateresults = new runnable() {    public void run() {     invalidate(); //     }   };  }

数据封装类

  public class sentence {     private string name;   private int index;     public sentence(int index,string name){    this.name=name;    this.index=index;   }     public string getname() {    return name;   }     public void setname(string name) {    this.name = name;   }     public int getindex() {    return index;   }     public void setindex(int index) {    this.index = index;   }      }

布局

  <com.mypackager.ui.verticalscrolltextview     android:id="@+id/scoll_textview"     android:layout_width="500dp"     android:layout_height="500dp"     android:text="@string/company_intrduce_text"     android:visibility="gone"     ></com.mypackager.verticalscrolltextview>

activity代码

  list lst=new arraylist<sentence>();     for(int i=0;i<8;i++){      if(i%2==0){       sentence sen=new sentence(i,i+1+"nanjingxixi");       lst.add(i, sen);      }else{       sentence sen=new sentence(i,i+1+"hello world!");       lst.add(i, sen);      }     }        play_textview.setlist(lst);       play_textview.updateui(); 

以上就是android开发分享Android实现歌词滚动效果的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/901508.html

(0)
上一篇 2021年10月24日
下一篇 2021年10月24日

精彩推荐