转载请注明出处:王亟亟的大牛之路

今天没有P1啦!。 对换工作有想法的。能够找昨天的P1。哈哈 地址:http://blog.csdn.net/ddwhan0123/article/details/50728434


今天上一个自身闪烁,用于吸引用户注意力的TextView * RevealTextView*

先上下效果图:(这图片够大的)

How to use?

Gradle

dependencies {
compile 'com.antonionicolaspina:revealtextview:2.0'
}

Eclipse

Copy下 attires.xml 和RevealTextView.java即可了,内容不多。


接下来我们来拆拆实现。先看一下自己定义Styleable的东西

 <declare-styleable name="RevealTextView">
<attr name="rtv_duration" format="integer" />
<attr name="android:text" />
</declare-styleable>

就仅仅有持续时间和文字

接下来看详细实现

public final class RevealTextView extends TextView implements Runnable, ValueAnimator.AnimatorUpdateListener

继承于TextView 实现多线程以及动画的时间,一看就知道 他没实用诸如Handler的实现,纯粹的主线程子线程的相互操作配合动画来实现闪烁效果

  protected void init(TypedArray attrs) {
try {
animationDuration = attrs.getInteger(R.styleable.RevealTextView_rtv_duration, animationDuration);
text = attrs.getString(R.styleable.RevealTextView_android_text);
} finally {
attrs.recycle();
} setAnimatedText(text);
}

接着就是初始化,然后就是调用開始动画的操作,这里是把标签传来的字送了过去。

public void setAnimatedText(String text) {
this.text = text;
alphas = new double[text.length()];
for(int i=0; i<text.length(); i++) {
alphas[i] = Math.random() - 1.0f;
} setText(text); replayAnimation();
}

这边用一个数组作为整个字符串的容器。然后把每一个字符生成一个随机数放入容器中,然后開始多线程的操作。

public void replayAnimation() {
if (null != text) {
post(this);
}
}

当字符串不为空開始运行多线程操作。

而且这2个方法是public的,给予我们外部调用的。

 @Override
public void run() {
final int color = getCurrentTextColor(); red = Color.red(color);
green = Color.green(color);
blue = Color.blue(color); ValueAnimator animator = ValueAnimator.ofFloat(0f, 2f);
animator.setDuration(animationDuration);
animator.addUpdateListener(this);
animator.start();
}

在run方法中运行了 我们的动画的初始化操作

  @Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
final float value = (float) valueAnimator.getAnimatedValue();
SpannableStringBuilder builder = new SpannableStringBuilder(text);
for(int i=0; i<text.length(); i++) {
builder.setSpan(new ForegroundColorSpan(Color.argb(clamp(value + alphas[i]), red, green, blue)), i, i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
setText(builder);
}

在onAnimationUpdate中对字体进行二次处理终于实现了 图中的效果

作者git:https://github.com/ANPez/RevealTextView

下载地址:https://github.com/ANPez/RevealTextView/archive/master.zip

翻翻git之---闪烁动画的TextView RevealTextView的更多相关文章

  1. 高逼格UILabel的闪烁动画效果

    高逼格UILabel的闪烁动画效果 最终效果图如下: 源码: YXLabel.h 与  YXLabel.m // // YXLabel.h // // Created by YouXianMing o ...

  2. JS框架_(JQuery.js)夜晚天空满天星星闪烁动画

    百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...

  3. 简单CSS实现闪烁动画(+1白话讲解)

    原文:简单CSS实现闪烁动画(+1白话讲解) 本文转载于:猿2048网站⇒https://www.mk2048.com/blog/blog.php?id=icj2chj2ab 背景 本文承接自上文&l ...

  4. 翻翻git之---给传统的搜索增添友好动画 JJSearchViewAnim

    转载请注明出处:王亟亟的大牛之路 这篇我又是个酱油,只是传播好东西也是一份功德. 由于节前被告知节后要把之前的EC项目翻成AS.那肯定要做一些加入新功能和旧实现替代的事,所以这两天也比較忙,正好另一些 ...

  5. 翻翻git之---效果鲜明的类ViewPager库 ConvenientBanner(对图片载入部分进行改动)

    转载请注明出处:王亟亟的大牛之路 昨天写了篇基础的View绘制的内容貌似观众老爷们不怎么喜欢.那再这里再安利下自己定义View时.用到Paint Canvas的一些温故.讲讲用路径绘画实现动画效果(基 ...

  6. 翻翻git之---实现QQ空间点赞部分实现的自己定义控件 EasyLikeArea

    转载请注明出处:王亟亟的大牛之路 昨天在家里弄鱼的事没上班,也就没写东西.决定今天早上补一篇,正好看到了 Easy like area in the circle of friends or QQ q ...

  7. 翻翻git之---有用的欢迎页开源库 AppIntro

    转载请注明出处:王亟亟的大牛之路 今天没有P1.直接进入正题 今天上的是一个帅帅的app滑动介绍页 . 为什么说帅? 作者对自己的内容是这么定义的 Make a cool intro for your ...

  8. 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)

    转载请注明出处:王亟亟的大牛之路 距离过春节还有1天.继续这一系列的git翻料之旅. 昨天的工具类真的非常棒,这里再推崇一下 传送门:http://blog.csdn.net/ddwhan0123/a ...

  9. 翻翻git之---炫酷的自己定义翻滚View TagCloudView

    转载请注明出处:王亟亟的大牛之路 周一好,又到了每周最困的一天.近期都被啮齿类动物搞的累死,废话不多,今天上一个自己定义的ViewGroup实现一个3D球形集合. 效果图: 效果还不错,能够作为短小文 ...

随机推荐

  1. hdoj-1016-Prime Ring Problem【深搜】

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...

  2. int long long 的取值范围

    unsigned   int   0-4294967295   //整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明 ...

  3. [ Javascript ] JavaScript中的定时器(Timer) 是怎样工作的!

    作为入门者来说.了解JavaScript中timer的工作方式是非常重要的.通常它们的表现行为并非那么地直观,而这是由于它们都处在一个单一线程中.让我们先来看一看三个用来创建以及操作timer的函数. ...

  4. OpenCASCADE 参数曲面面积

    OpenCASCADE 参数曲面面积 eryar@163.com Abstract. 本文介绍了参数曲面的第一基本公式,并应用曲面的第一基本公式,结合OpenCASCADE中计算多重积分的类,对任意参 ...

  5. UDP连接调用connect()函数

    UDP是一个无连接的协议,它没有像TCP中EOF之类的东西. 8.11 UDP的connect函数 除非套接字已连接,否则异步错误是不会反悔到UDP套接字的. 我们确实能够给UDP套接字调用conne ...

  6. 如何让hudson的两个job共用一个svn工作目录

    作者:朱金灿 来源:http://blog.csdn.net/clever101 现在我的需求是这样的:一个软件需要编译完全版本和基础版本,完全版本的基础功能较多,基础版本只包含了基础功能.有时只需要 ...

  7. (转)OpenCV 基本知识框架

    以下是对<学习OpenCV>一书知识框架的简单梳理 转自:http://blog.chinaunix.net/uid-8402201-id-2899695.html 一.基础操作      ...

  8. Shiro + SSM(框架) + Freemarker(jsp)

    Shiro + SSM(框架) + Freemarker(jsp)讲解的权限控制Demo,还不赶快去下载? 我们知道Ajax不能做页面redirect和forward跳转,所以Ajax请求假如没登录, ...

  9. new不抛出异常nothrow与new_handler

    可以看这里: http://blog.csdn.net/huyiyang2010/article/details/5984987 现在的new是会抛出异常的,bad::alloc 如果不想抛出异常两种 ...

  10. Android自定义系统分享面板

    在Android中实现分享有一种比较方便的方式,调用系统的分享面板来分享我们的应用.最基本的实现如下: public Intent getShareIntent(){ Intent intent = ...