TextView自带的走马灯效果在失去焦点的情况下会无效,公司正好需要一个这样的效果,即使失去焦点走马灯效果依然存在,那么该怎么做呢?网上乱七八糟的代码一大堆,写的那么复杂,所以我就写了一个简单的例子,下面直接上代码了。
1.自定义TextView:
- package com.zhf.TextAutoMoveDemo;
-
- import Android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.util.AttributeSet;
- import android.widget.TextView;
-
- /**
- * 自定义TextView,TextView自带了该功能,但功能有限,最重要的是TextView失去焦点的情况下走马灯效果会暂停!
- *
- * @author administrator
- *
- */
- public class MyTextView extends TextView implements Runnable {
- private Text text;
-
- public MyTextView(Context context, AttributeSet attrs) {
- super(context, attrs);
- text = new Text(
- "走马灯效果演示...",
- 0, 20, 5);
- }
-
- public void startMove() {
- Thread thread = new Thread(this);
- thread.start();
- }
-
- @Override
- public void run() {
- try {
- while (true) {
- // 1.刷新
- postInvalidate();
- // 2.睡眠
- Thread.sleep(200L);
- // 3.移動
- text.move();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- // 背景色
- canvas.drawColor(Color.WHITE);
- // 绘制文字
- text.draw(canvas);
- }
-
- }
|
2.实体类Text
- package com.zhf.TextAutoMoveDemo;
-
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
-
- public class Text {
- private Paint paint;
- private String content;//文字内容
- private float x;//x坐标
- private float y;//y坐标
- private float stepX;//移动步长
- private float contentWidth;//文字宽度
- public Text(String content, float x, float y, float stepX) {
- this.content = content;
- this.x = x;
- this.y = y;
- this.stepX = stepX;
- //画笔参数设置
- paint = new Paint();
- paint.setColor(Color.RED);
- paint.setTextSize(20f);
- this.contentWidth = paint.measureText(content);
- }
-
- public void move() {
- x -= stepX;
- if (x < -contentWidth)//移出屏幕后,从右侧进入
- x = 320;//屏幕宽度,真实情况下应该动态获取,不能写死
- }
-
- public void draw(Canvas canvas) {
- canvas.drawText(content, x, y, paint);
- }
- }
|