91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android實現鎖屏熒光效果的方法

發布時間:2021-04-17 10:35:58 來源:億速云 閱讀:219 作者:小新 欄目:移動開發

小編給大家分享一下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,mTouchPoint.y,mStartPoint.x,mStartPoint.y) >=
   UNLOCK_DISTANCE)
   Global.Broadcast(getContext(),"");
  break;
  default:
  break;
 }
 return true;
 }

以上是“Android實現鎖屏熒光效果的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木萨尔县| 时尚| 金华市| 崇信县| 增城市| 墨竹工卡县| 云阳县| 日照市| 吴江市| 葵青区| 洪泽县| 郴州市| 肃南| 深水埗区| 泌阳县| 鄂尔多斯市| 鹤峰县| 越西县| 高雄市| 丰宁| 肃宁县| 崇明县| 柳州市| 南华县| 尉犁县| 灌云县| 怀来县| 元朗区| 沙田区| 乐陵市| 邯郸市| 屏边| 忻城县| 合山市| 辽阳县| 彭阳县| 渝中区| 旌德县| 南宁市| 新巴尔虎右旗| 唐山市|