Android Shader应用开发之霓虹闪烁文字效果

发布时间 - 2026-01-11 02:21:36    点击率:

本文实例为大家分享了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);

 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # Shader  # 霓虹闪烁文字  # Android手机显示多彩霓虹灯效果  # Android图像处理之霓虹滤镜效果  # Android布局之帧布局FrameLayout详解  # Android布局之FrameLayout帧布局  # Android实现气泡布局/弹窗效果 气泡尖角方向及偏移量可控  # Android布局实现圆角边框效果  # Android动画效果之自定义ViewGroup添加布局动画(五)  # Android给布局、控件加阴影效果的示例代码  # Android编程实现圆角边框布局效果的方法  # Android布局控件DrawerLayout实现完美侧滑效果  # Android开发实现布局帧布局霓虹灯效果示例  # 个字  # 在这里  # 我在  # 基础上  # 一个字  # 先把  # 大家分享  # 到第  # 具体内容  # 大家多多  # 往右  # 边缘  # 不停地  # 只是在  # AttributeSet  # widget  # TextView  # text  # Nullable  # annotation 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何在阿里云完成域名注册与建站?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何快速生成高效建站系统源代码?  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  Laravel怎么使用Intervention Image库处理图片上传和缩放  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  Python文件操作最佳实践_稳定性说明【指导】  如何批量查询域名的建站时间记录?  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Android使用GridView实现日历的简单功能  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel观察者模式如何使用_Laravel Model Observer配置  中山网站推广排名,中山信息港登录入口?  html5的keygen标签为什么废弃_替代方案说明【解答】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  开心动漫网站制作软件下载,十分开心动画为何停播?  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何在阿里云高效完成企业建站全流程?  如何用狗爹虚拟主机快速搭建网站?  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  JS中对数组元素进行增删改移的方法总结  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  Swift中switch语句区间和元组模式匹配  谷歌Google入口永久地址_Google搜索引擎官网首页永久入口  无锡营销型网站制作公司,无锡网选车牌流程?  如何构建满足综合性能需求的优质建站方案?  微信小程序 配置文件详细介绍  手机软键盘弹出时影响布局的解决方法  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  浅谈javascript alert和confirm的美化  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速重置建站主机并恢复默认配置?  网站建设保证美观性,需要考虑的几点问题!  如何基于PHP生成高效IDC网络公司建站源码?  如何在局域网内绑定自建网站域名?