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

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

(0)

相关推荐

  • Android自定义View之边框文字、闪烁发光文字

    对现有控件进行扩展 1.绘制如下所示的两层背景的TextView 创建BorderTextView继承TextView 在构造函数中初始化一些基本数据 //外边框 mPaint1 = new Paint(); mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_bright)); //画笔的样式,充满 mPaint1.setStyle(Paint.Style.FILL); //内边框 mPaint2 = new P

  • Android自定义控件打造闪闪发光字体

    介绍 在小米的开机动画和一些欢迎界面中, 我们经常看到这种闪闪发光的流光字体.看起来很炫酷,其实实现原理相当简单,我们只需要写自定义控件继承TextView,然后使用渲染器Gradient设置颜色渐变和Paint的setShadowLayer方法设置阴影,然后不断刷新改变位移即可. 实现 首先写一个shineTextView类继承自TextView. public class ShineTextView extends TextView { // 线性渐变渲染 private LinearGra

  • Android实现锁屏荧光效果

    前言 这是几个月前写的博文,睡前看了觉得有些敷衍,还是改了再发吧. 之前的博客做了个锁屏应用,在以前各种酷炫的锁屏效果是很流行的,有时候会去锁屏市场看看哪些自己喜欢的特效,发现有个很酷炫的荧光解锁的效果,于是想着能否自己实现一下. 锁屏效果: 原理: 锁屏的原理在前些篇章已经有做介绍了,这里主要讲荧光这种效果的实现. 原理要点: 1)关于荧光点,每一个荧光店都是我们一个对象实体,因此我们将其单独构造为一个类,它具有自己的一些属性,比如荧光开始时间,荧光点的半径,荧光点的生命周期等. /** *

  • Android屏幕锁屏弹窗的正确姿势DEMO详解

    在上篇文章给大家介绍了Android程序开发仿新版QQ锁屏下弹窗功能.今天通过本文给大家分享android锁屏弹窗的正确姿势. 最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结.本文将从以下两点对屏幕锁屏进行解析: 1. 如何监听系统屏幕锁屏 2. 如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也

  • 深入理解Android M 锁屏密码存储方式

    Android M 之前锁屏密码的存储 在 Android M 之前,锁屏密码的存储格式很简单,其使用了 64 位随机数作为 salt 值,此 salt 值被存储在 SQLite 数据库 /data/system/locksettings.db 中.密码在存储的时候,会将输入的密码加上此随机数组成新的字符串.然后对新的字符串分别进行 SHA-1 和 MD5 加密,将加密后的密文通过 MD5 + SHA-1 的方式进行字符串拼接,组成新的密文存储在 /data/system/password.ke

  • Android实现闪屏页效果

    本文实例为大家分享了Android实现闪屏页效果的具体代码,供大家参考,具体内容如下 1.效果图 2.闪屏页逻辑及布局 2.1 activity_splash.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http:

  • android九宫格锁屏控件使用详解

    本文实例为大家分享了android九宫格锁屏控件的具体代码,供大家参考,具体内容如下 代码: public class LockView extends View {     //半径     private int radius;     //中心小圆半径     private int smallRadius;     //一行个数     private int column;     //选中颜色     private int selectColor;     //未选中颜色    

  • android禁止锁屏保持常亮(示例代码)

    在播放video的时候在mediaplayer mMediaPlayer.setScreenOnWhilePlaying(true); 已经设置了,在原生的android没有问题和在defy上也没有问题,一到三星的galaxy上就有问题,不知道三星他们改了哪些地方.一般的话设置了播放视频屏幕没有自动.但是在三星上就出了问题. 只好再找找.一般的话设置有两种方法. 如下: 复制代码 代码如下: 1. getWindow().addFlags(WindowManager.LayoutParams.F

  • Libgdx解决部分Android机型锁屏崩溃的方法

    libgdx使用了全屏模式之后,在某些机型会出现崩溃的情况,两年前就存在了,一直到现在为止,官方都没进行修复,其崩溃原因就是在源码AndroidGraphics.java中的onPause可以看到这样子的一段代码: void pause () { synchronized (synch) { if (!running) return; running = false; pause = true; while (pause) { try { // TODO: fix deadlock race c

  • 设置Android系统永不锁屏永不休眠的方法

    在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠.本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧. Android 6.0.1 Create:2016-02-29 1.Settings 删掉屏幕待机选项 packages/apps/Settings/res/xml/display_settings.xml <!-- Hide screen sleep <ListPreference android:key=&

  • Android实战教程第六篇之一键锁屏应用问题解决

    上一篇,初步开发了这个应用,功能都有了(见http://www.jb51.net/article/96992.htm 点击打开链接). 但是遗留了两个问题:1.还是无法卸载:2.必须手动去点击应用程序进入程序,再点击按钮,这显得很麻烦. 这一篇就解决上面两个问题,做出最好的效果. 首先解决无法卸载问题: 在清单文件中,再配置一键卸载的主活动(两个主活动无所谓,只不过在桌面上显示两个图标而已,其实仍然是一个应用) <activity android:name="com.itydl.locks

  • Android如何实现锁屏状态下弹窗

    前言 想在锁屏上面实现弹窗,第一个想法就是利用 WindowManager 设置 Window 的 Flag,通过设置 Flag 的显示优先级来让窗口显示在锁屏的上面. 接下来就是试验可能相关的 Window Type 属性,验证该方案是否可行. 在尝试各个 Window Type 属性之前需要明确各个 Type 所需要的权限,下面是 com.android.internal.policy.impl.PhoneWindowManager.checkAddPermission 的源码: publi

随机推荐