Android之重写TextView实现走马灯效果

Linux大全评论955 views阅读模式

TextView自带的走马灯效果在失去焦点的情况下会无效,公司正好需要一个这样的效果,即使失去焦点走马灯效果依然存在,那么该怎么做呢?网上乱七八糟的代码一大堆,写的那么复杂,所以我就写了一个简单的例子,下面直接上代码了。

1.自定义TextView:

 

  1. package com.zhf.TextAutoMoveDemo;  
  2.   
  3. import Android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.util.AttributeSet;  
  7. import android.widget.TextView;  
  8.   
  9. /** 
  10.  * 自定义TextView,TextView自带了该功能,但功能有限,最重要的是TextView失去焦点的情况下走马灯效果会暂停! 
  11.  *  
  12.  * @author administrator 
  13.  *  
  14.  */  
  15. public class MyTextView extends TextView implements Runnable {  
  16.     private Text text;  
  17.   
  18.     public MyTextView(Context context, AttributeSet attrs) {  
  19.         super(context, attrs);  
  20.         text = new Text(  
  21.                 "走马灯效果演示...",  
  22.                 0205);  
  23.     }  
  24.   
  25.     public void startMove() {  
  26.         Thread thread = new Thread(this);  
  27.         thread.start();  
  28.     }  
  29.   
  30.     @Override  
  31.     public void run() {  
  32.         try {  
  33.             while (true) {  
  34.                 // 1.刷新   
  35.                 postInvalidate();  
  36.                 // 2.睡眠   
  37.                 Thread.sleep(200L);  
  38.                 // 3.移動   
  39.                 text.move();  
  40.             }  
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45.   
  46.     @Override  
  47.     protected void onDraw(Canvas canvas) {  
  48.         // 背景色   
  49.         canvas.drawColor(Color.WHITE);  
  50.         // 绘制文字   
  51.         text.draw(canvas);  
  52.     }  
  53.   
  54. }  

2.实体类Text

 

  1. package com.zhf.TextAutoMoveDemo;  
  2.   
  3. import android.graphics.Canvas;  
  4. import android.graphics.Color;  
  5. import android.graphics.Paint;  
  6.   
  7. public class Text {  
  8.     private Paint paint;  
  9.     private String content;//文字内容   
  10.     private float x;//x坐标   
  11.     private float y;//y坐标   
  12.     private float stepX;//移动步长   
  13.     private float contentWidth;//文字宽度   
  14.     public Text(String content, float x, float y, float stepX) {  
  15.         this.content = content;  
  16.         this.x = x;  
  17.         this.y = y;  
  18.         this.stepX = stepX;  
  19.         //画笔参数设置   
  20.         paint = new Paint();  
  21.         paint.setColor(Color.RED);  
  22.         paint.setTextSize(20f);  
  23.         this.contentWidth = paint.measureText(content);  
  24.     }  
  25.   
  26.     public void move() {  
  27.         x -= stepX;  
  28.         if (x < -contentWidth)//移出屏幕后,从右侧进入   
  29.             x = 320;//屏幕宽度,真实情况下应该动态获取,不能写死   
  30.     }  
  31.   
  32.     public void draw(Canvas canvas) {  
  33.         canvas.drawText(content, x, y, paint);  
  34.     }  
  35. }  

企鹅博客
  • 本文由 发表于 2019年9月17日 12:50:39
  • 转载请务必保留本文链接:https://www.qieseo.com/173258.html

发表评论