国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現歌詞滾動效果

2019-10-21 21:36:00
字體:
來源:轉載
供稿:網友

本文實例為大家分享了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(); 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桂平市| 铁岭县| 甘肃省| 奎屯市| 汉源县| 东台市| 洛宁县| 嵊泗县| 开化县| 蒲江县| 翼城县| 衡阳市| 共和县| 聊城市| 越西县| 合阳县| 津南区| 张家界市| 巴林左旗| 礼泉县| 上饶市| 鸡西市| 盐池县| 章丘市| 灵武市| 汝阳县| 遵化市| 安溪县| 红原县| 商水县| 原平市| 芜湖市| 定远县| 莲花县| 麦盖提县| 博乐市| 巴马| 屯门区| 焦作市| 遵义县| 湛江市|