Android实现锁屏荧光效果

作者:Lin_Zero 时间:2023-09-02 03:12:03 

前言

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

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

锁屏效果:

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(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实现荧光效果

来源:https://blog.csdn.net/z82367825/article/details/52226113

标签:Android,锁屏,荧光
0
投稿

猜你喜欢

  • Java一个简单的红包生成算法

    2023-12-12 10:56:50
  • java封装前端查询条件通用版

    2023-06-24 12:06:15
  • android 选项卡(TabHost)如何放置在屏幕的底部

    2023-07-09 21:19:59
  • Kotlin List与Set和Map实例讲解

    2023-03-01 01:29:57
  • java微信公众号支付示例详解

    2023-11-15 05:52:01
  • C#实现窗体全屏的两种方法

    2021-10-06 19:14:04
  • springboot 无法自动装配的问题

    2021-05-29 06:14:30
  • Android TextView显示Html类解析的网页和图片及自定义标签用法示例

    2023-06-12 04:39:41
  • IDEA 2020.2 +Gradle 6.6.1 + Spring Boot 2.3.4 创建多模块项目的超详细教程

    2021-11-08 00:42:36
  • ERROR/AndroidRuntime(17121)的问题解决

    2023-02-10 04:13:12
  • Android ViewPager实现页面左右切换效果

    2022-12-28 04:49:35
  • 详解Spring 中如何控制2个bean中的初始化顺序

    2023-05-06 13:43:18
  • Java双向链表的操作

    2021-07-31 02:54:33
  • Android 基于agora 开发视频会议的代码

    2021-11-30 02:53:04
  • C# PDF Page操作设置页面切换按钮的方法

    2021-11-18 04:33:43
  • 详解Android短信的发送和广播接收实现短信的监听

    2022-08-14 16:55:23
  • SpringBoot集成Redis流程详解

    2022-11-08 21:38:11
  • 专属于程序员的浪漫-Java输出动态闪图iloveyou

    2023-12-01 16:00:57
  • Kotlin之在Gradle中无参(no-arg)编译器插件的使用详解

    2023-07-31 19:11:43
  • C++实现图书馆管理系统源码

    2022-05-19 14:30:02
  • asp之家 软件编程 m.aspxhome.com