Android Shader应用开发之霓虹闪烁文字效果
作者:Android_Study_OK 发布时间:2022-09-11 16:43:20
标签:Android,Shader,闪烁文字
本文实例为大家分享了Android霓虹闪烁文字效果的具体代码,供大家参考,具体内容如下
package com.example.apple.shaderdemo;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Shader;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* Created by apple on 2017/5/10.
*/
public class LinearGradientTextView extends TextView {
private TextPaint mPaint;
private LinearGradient mLinearGradient ;
private Matrix mMatrix;
private float mTranslate;
private float DELTAX = 20;
private int mGradientSize;
public LinearGradientTextView(Context context) {
super(context);
}
public LinearGradientTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
/**
* 优先于onDraw执行,在这里得到系统绘制TextView的画笔,然后给这个画笔设置shader
* 这样下面在执行onDraw的时候,使用的就是带有Shader效果的画笔了
* @param w
* @param h
* @param oldw
* @param oldh
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// ★拿到系统TextView的画笔
mPaint = getPaint();
// 得到文本
String text = getText().toString();
// 用画笔测量文本的长度
float textWith = mPaint.measureText(text);
// 3个文字的宽度
mGradientSize = (int) (textWith / text.length() * 3);
// 从左边-gradientSize开始,即左边距离文字gradientSize开始渐变
// 一个渐变单位是:从第一个字之前3字距离开始到第一个字之前位置终结
//然后一直让这个渐变单位从左往右移动dx位移,直到最右侧后,向左移动
// CLAMP意思是:由于你的只是在渐变3个字的长度,那么剩余的空间,让边缘颜色去填充
mLinearGradient = new LinearGradient(-mGradientSize,0,0,0,new int[]{
0xffff0000, 0xff00ff00, 0xff00ffff},null, Shader.TileMode.CLAMP
);
mPaint.setShader(mLinearGradient);
}
@Override
protected void onDraw(Canvas canvas) {
// 调用super,意思是按照系统绘制textview的流程先把textview绘制完成
super.onDraw(canvas);
// 我在系统基础上再绘制一些效果
mTranslate += DELTAX;
float textWidth = getPaint().measureText(getText().toString());
// 到了边界dx取反
if(mTranslate > textWidth + mGradientSize || mTranslate < 0){
DELTAX = - DELTAX;
}
// 不停地方平移,得到闪烁的效果
mMatrix = new Matrix();
mMatrix.setTranslate(mTranslate, 0);
mLinearGradient.setLocalMatrix(mMatrix);
// 延时重绘
postInvalidateDelayed(50);
}
}


猜你喜欢
- 我们经常在项目中使用的线程池,但是是否关心过线程池的关闭呢,可能很多时候直接再项目中直接创建线程池让它一直运行当任务执行结束不在需要了也不去
- 一、判断一个字符串str不为空的方法有:1、str == null;2、"".equals(str);3、str.len
- future机制是在通过线程去执行某个任务的时候,如果比较耗时,我们可以通过futureTask机制,异步返回,继续去执行其他的任务,在需要
- 1.前言对于一个Android开发者来说,每一个页面都继承一个单独的系统Activity,有时候会带来很多不必要的困扰。比如:每一个页面会有
- 一、前言在java中,和C语言一样,也有关于字符串的定义,并且有他自己特有的功能,下面我们一起来学习一下。二、String类概述string
- 1、springboot controller 单例Spring中 controller默认是单例的,因为单例所以不是线程安全的。所以需要注
- 前言在看一本关于高性能编程的时候发现 Java8 中关于接口的新特性的介绍,这个特性是真的棒,解决了一个接口中有多个方法,但并不想实现该接口
- 一.前言在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,
- Java的集合类是一种特别有用的工具,它可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈、队列等。Java集合还可以用于板寸具
- 1.Object类的equals()方法:比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个
- 最近做通讯录小屏机 联系人姓名显示--长度超过边界字体变小/** * 自定义TextView,文本内容自动调整字体大小以适应TextVie
- 在前面几篇文章中,我们详细介绍了Androi
- Java实现驼峰、下划线互转1.使用 Guava 实现先引入相关依赖<dependency> <
- 前言相信大家应该都有所体会,在以前我们要实现流动性布局,比较繁琐,Google开源了一个项目叫FlexboxLayout,相信大家都不陌生。
- 经度指示南北方向,纵向纬度指示东西方向,横向获取经纬度使用GPS权限:<uses-permission android:name=&q
- 网格布局标签是GridLayout。这个布局是android4.0新增的布局。这个布局只有4.0之后的版本才能使用。不过新增了一些东东①跟L
- Java以命令模式设计模式1、简单介绍意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。主要解决:在软件系统中,行为
- 当我们打开app的时候是不是会有一瞬间的白屏然后再进入主活动,虽然这并不会造成什么不好的后果,但是感觉用户体验就不是很好。像网易云音乐等等
- 在Android中,线程内部或者线程之间进行信息交互时经常会使用消息,这些基础的东西如果我们熟悉其内部的原理,将会使我们容易、更好地架构系统
- ①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值