国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現鎖屏熒光效果

2019-10-22 18:13:50
字體:
來源:轉載
供稿:網友

前言

這是幾個月前寫的博文,睡前看了覺得有些敷衍,還是改了再發吧。

之前的博客做了個鎖屏應用,在以前各種酷炫的鎖屏效果是很流行的,有時候會去鎖屏市場看看哪些自己喜歡的特效,發現有個很酷炫的熒光解鎖的效果,于是想著能否自己實現一下。

鎖屏效果:

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實現熒光效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 清水河县| 嘉兴市| 顺昌县| 仁布县| 延庆县| 合江县| 黄石市| 宜兰县| 方山县| 浦东新区| 云南省| 镇远县| 威信县| 克拉玛依市| 介休市| 油尖旺区| 红河县| 宁安市| 林芝县| 宣化县| 闸北区| 玉林市| 临潭县| 平遥县| 外汇| 安康市| 黄石市| 常德市| 合阳县| 乐山市| 郧西县| 新营市| 晋中市| 紫阳县| 集安市| 远安县| 阜新市| 茂名市| 中宁县| 葵青区| 元谋县|