android流光动画和流光字体
Android流光动画,直接上代码
/*** 流光动画*/
public class FlowingLightView extends View {private Paint mPaint;private Path mPath;private LinearGradient mLinearGradient;private ValueAnimator mValueAnimator;public FlowingLightView(Context context) {this(context, null);}public FlowingLightView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public FlowingLightView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {mPaint = new Paint();mPath = new Path();}private void initPointAndAnimator(int w, int h) {Point point1 = new Point(0, 0);Point point2 = new Point(w, 0);Point point3 = new Point(w, h);Point point4 = new Point(0, h);mPath.moveTo(point1.x, point1.y);mPath.lineTo(point2.x, point2.y);mPath.lineTo(point3.x, point3.y);mPath.lineTo(point4.x, point4.y);mPath.close();// 斜率kfloat k = 0f * h / w;// 偏移float offset = 1f * w / 8;// 0f - offset * 2 为数值左边界(屏幕外左侧), w + offset * 2为数值右边界(屏幕外右侧)// 目的是使光影走完一遍,加一些时间缓冲,不至于每次光影移动的间隔都那么急促mValueAnimator = ValueAnimator.ofFloat(0f - offset/2, w + offset/2);mValueAnimator.setRepeatCount(-1);mValueAnimator.setInterpolator(new LinearInterpolator());mValueAnimator.setDuration(8000);mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float value = (float) animation.getAnimatedValue();mLinearGradient = new LinearGradient(value, k * value, value + 2, k * (value + 2),new int[]{Color.parseColor("#00FFE5EE"), Color.parseColor("#FFE5EE"), Color.parseColor("#00FFE5EE")}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);invalidate();}});mValueAnimator.start();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);int widthSize = MeasureSpec.getSize(widthMeasureSpec);int heightSize = MeasureSpec.getSize(heightMeasureSpec);initPointAndAnimator(widthSize, heightSize);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawPath(mPath, mPaint);}@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();mValueAnimator.cancel();}
}
android 流光字体
public class ShineTextView extends AppCompatTextView {private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private Paint mPaint;private int mViewWidth = 0;private int mTranslate = 0;public ShineTextView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {mViewWidth = getMeasuredWidth();if (mViewWidth > 0) {mPaint = getPaint();mLinearGradient = new LinearGradient(0,0,mViewWidth/8,0,new int[]{0xFFFF5997, 0xFFFFE5EE, 0xFFFF5997},null,Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mGradientMatrix != null) {mTranslate += mViewWidth / 10;if (mTranslate > 1.5 * mViewWidth) {mTranslate = -mViewWidth / 2;}mGradientMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);postInvalidateDelayed(100);}}
}
尾声
开发是需要一定的基础的,我是08年开始进入Android这行的,在这期间经历了Android的鼎盛时期,和所谓的Android”凉了“。中间当然也有着,不可说的心酸,看着身边朋友,同事一个个转前端,换行业,其实当时我的心也有过犹豫,但是我还是坚持下来了,这次的疫情就是一个好的机会,大浪淘沙,优胜劣汰。再等等,说不定下一个黄金浪潮就被你等到了。
这是我在这行工作10几年积累的一些资料,如果还想继续在这行业走下去的,或者现在打算跳槽,可以**私信【学习】**我愿意把资料免费分享给大家。
或者直接扫描下面二维码领取
Android学习PDF+架构视频+面试文档+源码笔记
- 330页 PDF Android核心笔记
- 几十套阿里 、字节跳动、腾讯、华为、美团等公司2020年的面试题
- PDF和思维脑图,包含知识脉络 + 诸多细节
- Android进阶系统学习视频
android流光动画和流光字体相关推荐
- Android自定义动画专题一
Android自定义动画 在目前的移动端产品中,不管是app还是网页一个好看酷炫的页面总是会第一时间吸引人的眼球,那么对于android开发人员来说,要想实现一个好看的页面必然需要掌握自定义控件以及自 ...
- android 自定义loading,Android自定义动画-StarLoadingView
今天来分享第二个自定义loading的动画,起了个名字叫 蹦跶的星星 ,还是老规矩先介绍,后上图. 实现效果在最后,GIF有点大,手机流量慎重. 介绍 首先声明做这个动画的初衷是为了学习和分享,所以从 ...
- android 三维动画效果,9款令人惊叹的HTML5 3D动画应用
原标题:9款令人惊叹的HTML5 3D动画应用 之前我们已经向大家分享了很多HTML5动画应用了,大部分都非常炫酷,也有一小部分是很实用的.今天我们要向各位HTML5动画爱好者介绍更多的HTML5 3 ...
- 【学习笔记】Android视图动画学习
2019独角兽企业重金招聘Python工程师标准>>> 1.Android View动画框架 Animation框架定义了透明度.旋转.缩放和位移几种常见的动画. 实现原理:每次绘制 ...
- android矢量动画 充电,android矢量动画
android矢量动画! 直接来个例子就明白了!(这里我把与动画无关的属性都用-表示) 首先你要有个矢量图 比如这个矢量图xml文件叫"vector1",文件在res\drawab ...
- Android视图动画集合AndoridViewAnimations
Android视图动画集合AndoridViewAnimations Android视图动画是针对视图对象的动画效果,包括对象平移.旋转.缩放和渐变四种类型.通过组合这四种类型,可以创建出无数种动画效 ...
- android开发字体样式,Android开发中修改程序字体的样式
Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体 可以采用an ...
- 使用android frame动画定义自己的ProgressBar
使用android frame动画定义自己的ProgressBar 在 res /layout/ainm 目录下面建一个frame_ainm.xml文件 <?xml version=&quo ...
- android动画封装,Android属性动画封装,快速构建动画
Android实现动画效果的方式主要有帧动画.补间动画.属性动画.关于安桌动画的基础知识可以查看这篇文章Android属性动画完全解析 这里我要讲的是如何快速构建出一个动画效果,如下图: 如果我们用属 ...
- Android m 自定义下拉菜单,Android实现动画效果的自定义下拉菜单功能
我们在购物APP里面设置收货地址时,都会有让我们选择省份及城市的下拉菜单项.今天我将使用Android原生的 Spinner 控件来实现一个自定义的下拉菜单功能,并配上一个透明渐变动画效果. 要实现的 ...
最新文章
- struts2之单个文件上传
- xp改mac地址linux,局域网络必备-mac地址修改
- 16版.就诊时排队叫号
- (收藏)Html相关网址
- ios pusher使用_使用.NET和Pusher构建实时评论功能
- pxc mysql mycat_Mycat+Pxc的配置
- 深入解读 MySQL 架构设计原理,剖析存储架构选型核心
- 初学JAVA随记——循环语句的几个要点
- Thingsboard 3.1.0 - 远程控制和GPIO状态显示
- 百度网盘下载神器度盘下载器
- MiroTik 路由器配置无线中继模式(超细教程)
- 不能创建对象qmdispatch_win7系统打开某些软件提示“Activex部件不能创建对象”的解决方法...
- python中的sort和sorted是什么意思_python中sort和sorted的另类用法
- SOLARIS SYSTEM COMMAND(个人整理笔记)
- 一个基于WinHttp的轻量级的分片下载库介绍
- Minecraft一些红石技巧(1)
- javac错误: 找不到符号或程序包XXX不存在
- 电机是怎么转的?(电机原理+电机控制+电机分类)
- elasticsearch分词练习、自定义分词器练习
- Linux学习中Xshell软件出现tom 不在 sudoers 文件中。此事将被报告。
热门文章
- python docx首行缩进两字符的设定方法
- 最新emoji表情代码大全_2020最新霜降早上好祝福语动态表情图片大全带字 温馨的霜降问候语免打字图片...
- 简单粗暴PyTorch之transforms详解(一)
- 计算机硬盘无法查找,电脑不认硬盘的原因,怎么解决电脑读不到硬盘?
- 除了攀附名人、杜撰荣恩录,家谱造假中,还有这件事令人羞耻
- fastlane二开java_从入门开始使用Fastlane
- c++随手写写(链表栈)
- 浏览器主页被修改的解决方案
- 阿里云大数据ACP认证学习笔记
- MAALA3.9_初等矩阵和等价 (Elementary Matrices and Equivalence)