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);

 }
}

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

(0)

相关推荐

  • Android自定义Dialog实现文字动态加载效果

    之前在技术问答上面看到一个提问 "加载中-" 后面三个点是动态的,这么一个效果实现.想来想去,好像没想到好的处理方式. 尝试了一下,以一个最笨的方式实现了.先来看一下效果 : 我是通过自定义一个Dialog,加载中的效果,是在Dialog内部实现的,进度还是从Activity里面控制的. 下面是Dialog实现类: public class CustomDialog extends AlertDialog { public CustomDialog(Context context) {

  • Android基于ViewFilpper实现文字LED显示效果示例

    本文实例讲述了Android基于ViewFilpper实现文字LED显示效果.分享给大家供大家参考,具体如下: 这里给出来自Android官方API DEMO中动画效果实例. /** * FlipperView文字效果动画之:文字滚动动画 * * @description: * @author ldm * @date 2016-5-17 上午9:58:26 */ public class Animation2 extends Activity implements AdapterView.OnI

  • Android实现文字翻转动画的效果

    本文实现了Android程序文字翻转动画的小程序,具体代码如下: 先上效果图如下: 要求: 沿Y轴正方向看,数值减1时动画逆时针旋转,数值加1时动画顺时针旋转. 实现动画的具体细节见"RotateAnimation.Java".为方便查看动画旋转方向,可以将RotateAnimation.DEBUG值设置为true即可.
 RotateAnimation参考自APIDemos的Rotate3DAnimation
 RotateAnimation的构造函数需有三个参数,分别说明动画组件的

  • Android中使用TextView实现文字跑马灯效果

    通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:ellipsize="marquee" android:focusable="true" android:

  • 控制Android LED灯颜色的代码实例

    很多Android手机上都配有LED灯,比如HTC的手机在充电.新来短信等时候都会有响应的指示,其实很简单的这都是NotificationManager的一些参数而已,下面Android123给大家说下如何通过代码控制LED灯的闪烁,因为有些机型没有LED灯或颜色种类较少,发布时需要真机观察. 复制代码 代码如下: final int ID_LED=19871103;         NotificationManager nm=(NotificationManager)getSystemSer

  • 详解Android应用层制作LED指示灯

    详解Android应用层制作LED指示灯 在Java应用层修改LED指示灯的颜色,这个花了我半天时间, 才实现该功能! public class LEDActivity extends Activity implements View.OnClickListener { private static final String TAG = "LED"; Button mLedTest; int mLedStatus = 0; private final int mLedColorRed

  • android显示TextView文字的倒影效果实现代码

    今天记录一下TextView的倒影效果,显示一串文字,然后在文字的下方显示出它的倒影,先上效果图: 最重要的就是View中getDrawingCache()方法,该方法可以获取cache中的图像,然后绘制出来. 废话不多说,我是想写一个带有倒影的时间,时间可以走动.首先先写一个带有时间走动的View,这个很简单,获取当前时间,然后开启一个线程,隔一秒获取当前时间一次,然后显示在TextView上,当然,我们写控件,就需要继承TextView,代码如下: 复制代码 代码如下: package co

  • Android编程实现类似天气预报图文字幕垂直滚动效果的方法

    本文实例讲述了Android编程实现类似天气预报图文字幕垂直滚动效果的方法.分享给大家供大家参考,具体如下: 在很多天气或者新闻的应用中,我们都能看到一些字幕滚动的效果,最简单的实现为跑马灯效果,用系统提供的属性即可实现. 复杂一些的就需要自己去用自定义控件实现. 比如 让TextView 实现垂直滚动. 这里我要讲的是垂直滚动的字幕效果,并且内容并不仅为文字,还可以加入图片或者其他元素. 废话不多说,还是直接上效果图: 首先还是看一下核心的实现: 目前我的做法是重写了ScrollView,对外

  • Android编程实现文字倒影效果的方法

    本文实例讲述了Android编程实现文字倒影效果的方法.分享给大家供大家参考,具体如下: 我们所有的view都继承自View类,View类里有个方法叫ondraw(). 即,我们看到的界面都是画出来的,所以我们可以重写ondraw()方法. 既然知道了这点就好办了,还有个难点就是,我们的倒影也是画出来的,那我们从哪去取原始图片呢?熟悉View的童鞋都知道Cache这个东西,不错,就是通过Cache我们取到了原始图片. 放源码了.,感谢期待.这个只是个demo,并不完善哈,布局什么的还需要调整下,

  • Android实现文字滚动效果

    Android 实现文字滚动效果,自己写了个timer小计时器,textview文字上下翻动效果: public class AutoTextView extends TextSwitcher implements ViewSwitcher.ViewFactory { private float mHeight; private Context mContext; //mInUp,mOutUp分别构成向下翻页的进出动画 private Rotate3dAnimation mInUp; priva

  • Android实现文字和图片混排(文字环绕图片)效果

    本文实例讲述了Android实现文字和图片混排(文字环绕图片)效果.分享给大家供大家参考,具体如下: 在平时我们做项目中,或许有要对一张图片或者某一个东西进行文字和图片说明,这时候要求排版美观,所以会出现文字和图片混排的情况,如图: 这种情况就是上下两个文字说明是连续在一起的,这就要求我们计算上面的文字说明怎么和下面的文字说明连贯结合在一起呢,这就要求我们进行计算了,下面给出代码,代码中也有详细的注释,原理也很简单. 因为算是比较简单,直接就在activity中去计算了: package com

随机推荐