Android实现锁屏荧光效果的方法

  介绍

小编给大家分享一下安卓实现锁屏荧光效果的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>前言

这是几个月前写的博文,睡前看了觉得有些敷衍,还是改了再发吧。

之前的博客做了个锁屏应用,在以前各种酷炫的锁屏效果是很流行的,有时候会去锁屏市场看看哪些自己喜欢的特效,发现有个很酷炫的荧光解锁的效果,于是想着能否自己实现一下。

<强>锁屏效果:

 Android实现锁屏荧光效果的方法

<强>原理:

锁屏的原理在前些篇章已经有做介绍了,这里主要讲荧光这种效果的实现。

<强>原理要点:

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实现锁屏荧光效果的方法