public class HightLightTextView extends TextView {

    // 存储view的宽度
private int mTextViewWidth = 0;
// 画笔
private Paint mPaint;
// 线性渲染
private LinearGradient mLinearGradient;
// 存储变换的matrix
private Matrix matrix;
// 移动距离
private int mTranslateX = 0; // 构造方法
public HightLightTextView(Context context) {
this(context, null);
} public HightLightTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
} public HightLightTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
} /**
* view的调用过程:构造方法->onFinishInflate->onSizeChanged->onDraw
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// 获取view的宽度,初始化画笔等初始属性
if (mTextViewWidth == 0) {
mTextViewWidth = getMeasuredWidth();
// 如果宽度大于0的话,则初始化
if (mTextViewWidth > 0) {
// 初始化画笔
mPaint = getPaint();
// 线性渲染
mLinearGradient = new LinearGradient(0, getMeasuredHeight(), mTextViewWidth, 0,
new int[]{0X55FFFFFF, 0XFFFFFFFF, 0X55FFFFFF},
new float[]{0, 0.5f, 1}, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
matrix = new Matrix();
}
}
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (matrix != null) {
mTranslateX += mTextViewWidth / 10;
// 如果移动的距离大于两倍的宽度,则重新开始移动
if (mTranslateX > 2 * mTextViewWidth) {
mTranslateX = -mTextViewWidth;
}
// 平移matrix
matrix.setTranslate(mTranslateX, 0);
// 设置线性变化的matrix
mLinearGradient.setLocalMatrix(matrix);
// 延迟50ms重绘 (重绘时会重新调用onDraw)
postInvalidateDelayed(50);
}
} }

Android-滑动解锁高亮文字自定义TextView的更多相关文章

  1. Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果

    一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...

  2. Swift: 打造滑动解锁文字动画

    原文:Swift: 打造滑动解锁文字动画 最近木事,找出来玩了玩facebook的paper.到处都是那个"slide to unlock your phone"的效果啊.忽闪忽闪 ...

  3. Android图表库MPAndroidChart(五)——自定义MarkerView实现选中高亮

    Android图表库MPAndroidChart(五)--自定义MarkerView实现选中高亮 在学习本课程之前我建议先把我之前的博客看完,这样对整体的流程有一个大致的了解 Android图表库MP ...

  4. [原创]Android秒杀倒计时自定义TextView

    自定义TextView控件TimeTextView代码: import android.content.Context; import android.content.res.TypedArray; ...

  5. [置顶] android 自定义TextView

    系统自带的控件TextView有时候没满一行就换行了,为了解决这个问题,自定义了一个TextView,只有一行显示不完全的情况下才会去换行显示,代码如下: package com.open.textv ...

  6. Android开发学习笔记-自定义TextView属性模版

    如果项目中有很多个控件使用的是同一种样式,则为了方便,可以将样式设置到系统中去,这样使用的时候会方便很多. 下面是自定义样式模版的方法. 1.在style.xml文件中添加自己要设置的样式内容 < ...

  7. Android 滑动效果进阶篇(六)—— 倒影效果

    上篇介绍了使用Animation实现3D动画旋转翻页效果,现在介绍图片倒影实现,先看效果图 本示例主要通过自定义Gallery和ImageAdapter(继承自BaseAdapter)实现 1.倒影绘 ...

  8. Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744400 之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得.如 ...

  9. ios开发之自定义textView

    自定义textView,从理论上讲很简单,根据需求自定义,比如我在开发中的需求就是现实一个字数的限制以及根据输入的文字改变提示剩余字数,那么开始我的基本思路就是自定义一个View,而里面包含一个子控件 ...

随机推荐

  1. Dispatch Queue 之 Invoke 当前队列

  2. C语言中const关键字的用法

    关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理 ...

  3. iOS-SVProgressHUDMaskType

    SVProgressHUDMaskTypeNone:默认图层样式,当HUD显示的时候,允许用户交互.   SVProgressHUDMaskTypeClear:当HUD显示的时候,不允许用户交互.   ...

  4. Eureka控制台参数说明

    1.HOME进入Eureka控制台首页,首先看HOME页的头部System StatusEnvironment: 环境,默认为test,该参数在实际使用过程中,可以不用更改Data center: 数 ...

  5. RocketMQ 分布式事务

    在RocketMQ中生产者有三种角色NormalProducer(普通).OrderProducer(顺序).TransactionProducer(事务),根据名字大概可以看出各个代表着什么作用,我 ...

  6. docker化java web应用

    一.简介 Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上.Docker的发展速度和火爆程度着实令人惊叹,一 ...

  7. maven -maven.test.skip skipTests

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下. -Dmaven.test.skip=true,不执行测试用例,也不编译测试 ...

  8. .Net Core项目添加日志功能

    一.微软内置的日志组件 在.Net Core中使用模板新建的Web Api项目时,会自动加入日志功能.只需要在控制器中注入ILogger就可以了.命名空间为:Microsoft.Extensions. ...

  9. netty源码解解析(4.0)-6 线程模型-IO线程EventLoopGroup和NIO实现(一)

    接口定义 io.netty.channel.EventLoopGroup extends EventExecutorGroup 方法 说明 ChannelFuture register(Channel ...

  10. KVM虚拟化原理与基础应用示例

    一.KVM简介 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调 ...