介绍
小编给大家分享一下安卓实现锁屏荧光效果的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>前言强>
这是几个月前写的博文,睡前看了觉得有些敷衍,还是改了再发吧。
之前的博客做了个锁屏应用,在以前各种酷炫的锁屏效果是很流行的,有时候会去锁屏市场看看哪些自己喜欢的特效,发现有个很酷炫的荧光解锁的效果,于是想着能否自己实现一下。
<强>锁屏效果:强>
<强>原理:强>
锁屏的原理在前些篇章已经有做介绍了,这里主要讲荧光这种效果的实现。
<强>原理要点:强>
1)关于荧光点,每一个荧光店都是我们一个对象实体,因此我们将其单独构造为一个类,它具有自己的一些属性,比如荧光开始时间,荧光点的半径,荧光点的生命周期等。
,/* * *,才能荧光点 ,*/,private class  FluorescencePointF { public 才能;PointF  mPointF;,//荧光点坐标 public 才能;long  mStartTime;,//开始时间 private 才能;float  mRadius;,//荧光点半径 private 才能final float  MAX_RADIUS =, Constant.sScaleX *, 15,,//荧光点最大半径 private 才能final float  MIN_RADIUS =, Constant.sScaleX *, 8,,//荧光点最小半径 private 才能final long  SHOW_TIME =, 600,,,,,,//荧光维持时间 private 才能final Interpolator  DEC_INTERPOLATOR =, new DecelerateInterpolator();,//减速 ,/* * ,,*,构造方法 ,,*/public 才能;FluorescencePointF (PointF pointF), { ,,this.mPointF =, pointF; ,,this.mStartTime =, System.currentTimeMillis (); ,,this.mRadius =, MIN_RADIUS +, mRandom.nextInt ((int), MAX_RADIUS); ,,Log.e(标签,“FluorescencePointF 观点:“,+,“x:“, + pointF.x +,“, y:“, +, pointF.y); ,,Log.e(标签,“FluorescencePointF 半径:“,+,this.mRadius); ,,} ,/* * ,,*,获得半径 ,,*/public 才能;float  getRadius () { ,,如果(! isAlive ()), return 0; ,,return mRadius *, DEC_INTERPOLATOR.getInterpolation ( ,,,,((浮动)SHOW_TIME 作用;(System.currentTimeMillis(),安康;mStartTime))/, SHOW_TIME); ,,} ,/* * ,,*,荧光点是否生存 ,,* @return ,,*/public 才能;boolean  isAlive () { ,,,return System.currentTimeMillis(),安康;mStartTime & lt;=, SHOW_TIME; ,,} 以前,}>2)关于荧光发光的实现
从锁屏主题的效果我们可以看的到,荧光点都是先发光闪亮,后来随着半径逐渐变,小亮度逐渐减弱。
光亮效果我们可以通过RadialGradient类渲染来实现,同时我们可以通过逐渐改变半径大小,来让荧光点看起来慢慢缩小。Shader Shader =, new RadialGradient (fluorescencePointF.mPointF.x fluorescencePointF ,,,,.mPointF.y,半径,COLOR_WHITE, COLOR_WHITE_SHADER, ,,,,Shader.TileMode.CLAMP); ,,mPaintShader.setShader(材质); ,,canvas.drawCircle (fluorescencePointF.mPointF.x fluorescencePointF.mPointF.y, ,,,,fluorescencePointF.getRadius (), mPaintShader);3)关于荧光点错落闪亮的效果
实现了一个荧光点如何发光的效果,接下来我们要实现的是一堆荧光点,为了让荧光效果看起来自然,我们当然不能同时产生一堆荧光点,我们要造成一种“随机”的效果,即随机的产生的时机,随机的数量,随机的大小,随机的坐标。
通过随机数,产生随机数量的荧光点,这时候荧光点的坐标和半径也是随机生成的(详见荧光点类的构造方法)
4)关于逻辑处理
逻辑的处理就很简单了,我们只需要在onTouchEvent()方法里处理触摸事件,生成随机的荧光点就行了。
, @Override ,public boolean  onTouchEvent (MotionEvent 事件),{ ,int action =, event.getAction ();=,,mTouchPoint.x  event.getX ();=,,mTouchPoint.y  event.getY (); ,switch (行动){//手才能指按下的时候,在手指附近区域生成荧光点 case 才能;MotionEvent.ACTION_DOWN: 时间=mStartPoint.x 才能;mTouchPoint.x; 时间=mStartPoint.y 才能;mTouchPoint.y; createRandomPoints才能(); 无效才能(); 打破才能;//手才能指移动,继续生成荧光点, case 才能;MotionEvent.ACTION_MOVE: createRandomPoints才能(); 无效才能(); 打破才能; case 才能;MotionEvent.ACTION_UP: 如果才能(getDistance (mTouchPoint.x、mTouchPoint.y mStartPoint.x, mStartPoint.y),祝辞=, ,,UNLOCK_DISTANCE) ,,Global.Broadcast (getContext (),““); 打破才能; case 才能;MotionEvent.ACTION_CANCEL: 如果才能(getDistance (mTouchPoint.x、mTouchPoint.y mStartPoint.x, mStartPoint.y),在=,,UNLOCK_DISTANCE) ,,Global.Broadcast (getContext (),““); 打破才能; 默认值:才能 打破才能; ,} ,return 真实; ,}Android实现锁屏荧光效果的方法