翻翻git之---闪烁动画的TextView RevealTextView
转载请注明出处:王亟亟的大牛之路
今天没有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的更多相关文章
- 高逼格UILabel的闪烁动画效果
高逼格UILabel的闪烁动画效果 最终效果图如下: 源码: YXLabel.h 与 YXLabel.m // // YXLabel.h // // Created by YouXianMing o ...
- JS框架_(JQuery.js)夜晚天空满天星星闪烁动画
百度云盘 传送门 密码:xftr 满天星星闪烁动画效果: (可用星空动画来作为页面背景,白色文字改为文章或者其他的O(∩_∩)O) <!doctype html> <html> ...
- 简单CSS实现闪烁动画(+1白话讲解)
原文:简单CSS实现闪烁动画(+1白话讲解) 本文转载于:猿2048网站⇒https://www.mk2048.com/blog/blog.php?id=icj2chj2ab 背景 本文承接自上文&l ...
- 翻翻git之---给传统的搜索增添友好动画 JJSearchViewAnim
转载请注明出处:王亟亟的大牛之路 这篇我又是个酱油,只是传播好东西也是一份功德. 由于节前被告知节后要把之前的EC项目翻成AS.那肯定要做一些加入新功能和旧实现替代的事,所以这两天也比較忙,正好另一些 ...
- 翻翻git之---效果鲜明的类ViewPager库 ConvenientBanner(对图片载入部分进行改动)
转载请注明出处:王亟亟的大牛之路 昨天写了篇基础的View绘制的内容貌似观众老爷们不怎么喜欢.那再这里再安利下自己定义View时.用到Paint Canvas的一些温故.讲讲用路径绘画实现动画效果(基 ...
- 翻翻git之---实现QQ空间点赞部分实现的自己定义控件 EasyLikeArea
转载请注明出处:王亟亟的大牛之路 昨天在家里弄鱼的事没上班,也就没写东西.决定今天早上补一篇,正好看到了 Easy like area in the circle of friends or QQ q ...
- 翻翻git之---有用的欢迎页开源库 AppIntro
转载请注明出处:王亟亟的大牛之路 今天没有P1.直接进入正题 今天上的是一个帅帅的app滑动介绍页 . 为什么说帅? 作者对自己的内容是这么定义的 Make a cool intro for your ...
- 翻翻git之---自己定义邮件发送buttonSendButton(流程分析,实现思路能够学习下)
转载请注明出处:王亟亟的大牛之路 距离过春节还有1天.继续这一系列的git翻料之旅. 昨天的工具类真的非常棒,这里再推崇一下 传送门:http://blog.csdn.net/ddwhan0123/a ...
- 翻翻git之---炫酷的自己定义翻滚View TagCloudView
转载请注明出处:王亟亟的大牛之路 周一好,又到了每周最困的一天.近期都被啮齿类动物搞的累死,废话不多,今天上一个自己定义的ViewGroup实现一个3D球形集合. 效果图: 效果还不错,能够作为短小文 ...
随机推荐
- Cocos2d-x游戏的一般验证分析
Coco2d-x引擎是相对于Unity3D的又一实力派引擎.尽管随着3D游戏的热门,很多其它的厂商偏向于Unity3D.可是Coco2d-x的普及量也不容小觑,特别是一些比較大的手游公司.比方触控科技 ...
- AutoLayout具体解释+手把手实战
首先说一下这篇博客尽管是标记为原创,可是事实并不是本人亲自写出来的.知识点和样例本人花了一天各处查找和整理终于决定写一个汇总的具体解释,解去各位朋友到处盲目查找的必要,由于不是转载某一个人的内容.故此 ...
- SQL解析器的性能測试
对同一个sql语句,使用3种解析器解析出ast语法树(这是编译原理上的说法,在sql解析式可能就是解析器自己定义的statement类型).运行100万次的时间对照. package demo.tes ...
- [Servlet]研究ServletContext对象
作者信息 作者姓名:金云龙 个人站点:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" Servl ...
- Python标准库:内置函数all(iterable)
假设可迭代的对象的所有元素所有非空(或者空迭代对象),就返回True.这个函数主要用来推断列表.元组.字典等对象是否有空元素.比方有10000个元素的列表,假设没有提供此函数,须要使用循环来实现.那么 ...
- view-activity跟控件在onkey事件上的传递关系
android 中Activity跟View对于键盘的监听,主要有以下几个方法 //按键按下 public boolean onKeyDown(int keyCode, KeyEvent event) ...
- single-page关于vue-router
最近复习了vue,项目实战前有练手,做一个简单的单页面应用. 1.router-view就是我们渲染的组件,router-view被包裹在一个div中,一旦路由跳转,router-view就会被渲染为 ...
- Linux下截图技巧
在需要Linux显示图片的场合,最普通的方法,会考虑用数码相,或是用Vmware,或VPc来抓拍,这样以来会比较麻烦,Linux也自带了些工具例如Gimp,ksnapshot这里我介绍一 ...
- J2msi 自己制作的把exe打成安装包简易GUI程序
因为wix是用命令行执行的,操作比较麻烦,所以自己写了个wix生成安装包的图形操作程序, 原理很简单,主要用java 来执行 wix 的heat .candle 和 light 命令 ,最后生成安装文 ...
- 将已有的Eclipse项目转化为Maven项目
将已有的Eclipse项目转化为Maven项目 我们之前在Eclipse IDE完成的Java命令行项目.Java Web项目也使用了构建工具--Ant,它帮助我们编译.运行Java源代码(无需我们自 ...