【移动应用开发技术】Android实现锁屏荧光效果的方法_第1页
【移动应用开发技术】Android实现锁屏荧光效果的方法_第2页
【移动应用开发技术】Android实现锁屏荧光效果的方法_第3页
【移动应用开发技术】Android实现锁屏荧光效果的方法_第4页
【移动应用开发技术】Android实现锁屏荧光效果的方法_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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(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,mTo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论