Android实现锁屏荧光效果

所属分类: 软件编程 / Android 阅读数: 78
收藏 0 赞 0 分享

前言

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

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

锁屏效果:

这里写图片描述

原理:

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

原理要点:

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(TAG,"FluorescencePointF point:" + "x:" +pointF.x + " y:" + pointF.y);
   Log.e(TAG,"FluorescencePointF radius:" + this.mRadius);
  }
  /**
   * 获得半径
   */
  public float getRadius(){
   if(!isAlive()) return 0;
   return mRadius * DEC_INTERPOLATOR.getInterpolation(
     ((float)SHOW_TIME - (System.currentTimeMillis() - mStartTime))/ SHOW_TIME);
  }
  /**
   * 荧光点是否生存
   * @return
   */
  public boolean isAlive(){
    return System.currentTimeMillis() - mStartTime <= SHOW_TIME;
  }
 }

2)关于荧光发光的实现

从锁屏主题的效果我们可以看到,荧光点都是先发光闪亮,后来随着半径逐渐变小,亮度逐渐减弱。
光亮效果我们可以通过RadialGradient类渲染来实现,同时我们可以通过逐渐改变半径大小,来让荧光点看起来慢慢缩小。

Shader shader = new RadialGradient(fluorescencePointF.mPointF.x,fluorescencePointF
     .mPointF.y,radius,COLOR_WHITE,COLOR_WHITE_SHADER,
     Shader.TileMode.CLAMP);
   mPaintShader.setShader(shader);
   canvas.drawCircle(fluorescencePointF.mPointF.x,fluorescencePointF.mPointF.y,
     fluorescencePointF.getRadius(),mPaintShader);

3)关于荧光点错落闪亮的效果

实现了一个荧光点如何发光的效果,接下来我们要实现的是一堆荧光点,为了让荧光效果看起来自然,我们当然不能同时产生一堆荧光点,我们要造成一种“随机”的效果,即随机的产生的时机,随机的数量,随机的大小,随机的坐标。

通过随机数,产生随机数量的荧光点,这时候荧光点的坐标和半径也是随机生成的(详见荧光点类的构造方法)

4)关于逻辑处理

逻辑的处理就很简单了,我们只需要在onTouchEvent()方法里处理触摸事件,生成随机的荧光点就行了。

 @Override
 public boolean onTouchEvent(MotionEvent event) {
 int action = event.getAction();
 mTouchPoint.x = event.getX();
 mTouchPoint.y = event.getY();
 switch (action){
  //手指按下的时候,在手指附近区域生成荧光点
  case MotionEvent.ACTION_DOWN:
  mStartPoint.x = mTouchPoint.x;
  mStartPoint.y = mTouchPoint.y;
  createRandomPoints();
  invalidate();
  break;
  //手指移动,继续生成荧光点 
  case MotionEvent.ACTION_MOVE:
  createRandomPoints();
  invalidate();
  break;
  case MotionEvent.ACTION_UP:
  if(getDistance(mTouchPoint.x,mTouchPoint.y,mStartPoint.x,mStartPoint.y) >= 
   UNLOCK_DISTANCE)
   Global.Broadcast(getContext(),"");
  break;
  case MotionEvent.ACTION_CANCEL:
  if(getDistance(mTouchPoint.x,mTouchPoint.y,mStartPoint.x,mStartPoint.y) >=
   UNLOCK_DISTANCE)
   Global.Broadcast(getContext(),"");
  break;
  default:
  break;
 }
 return true;
 }

码完,比较简单,如有错漏,欢迎指正

代码传送门:Android实现荧光效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多