首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 實現 TextView 從模糊到清晰的動畫效果

     編輯:程式設計綜合問答

想要實現 TextView 文字從模糊漸變清晰的動畫,許多開發者會嘗試對 TextView 截圖成 Bitmap 再做高斯模糊,但發現效果不佳或無法動態更新。關鍵在於理解:介面上的文字本質上也是像素,同樣可以用 Bitmap 繪製並套用模糊半徑動畫。

正確思路:動態更新模糊半徑

不要試圖一次性生成模糊圖片,而是採用幀動畫策略:

  1. 使用 Handler、ValueAnimator 或 AsyncTask 定時觸發(如每 16ms 一幀)。
  2. 每幀根據進度計算當前模糊半徑(如從 25f 線性遞減至 0f)。
  3. 對 TextView 的繪製快取 Bitmap 執行 RenderScript 高斯模糊(ScriptIntrinsicBlur)。
  4. 將模糊後的 Bitmap 設為 TextView 背景,並清空文字(setText("")),避免雙重顯示。
  5. 動畫結束時恢復原始 TextView 文字,移除背景圖片。

核心程式碼片段

// 獲取 TextView 繪製快取
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();

// 動畫迴圈中
RenderScript rs = RenderScript.create(context);
Allocation input = Allocation.createFromBitmap(rs, bitmap);
Allocation output = Allocation.createTyped(rs, input.getType());
ScriptIntrinsicBlur blur = ScriptIntrinsicBlur.create(rs, input.getElement());
blur.setRadius(currentRadius); // 當前幀半徑
blur.setInput(input);
blur.forEach(output);
output.copyTo(bitmap);

// 更新 UI
view.setText("");
view.setBackground(new BitmapDrawable(getResources(), bitmap));

效能優化建議

  • 複用 RenderScript、Allocation、ScriptIntrinsicBlur 物件,避免每幀重建造成 GC 抖動。
  • 若 API 21+,可改用 RenderEffect(Android 12+)或 BlurMaskFilter 簡化實作。
  • 文字較多時,考慮只對可見區域截圖模糊,減少像素運算量。

掌握「每幀靜態模糊 + 半徑漸變」的核心邏輯,即可流暢實現文字從模糊到清晰的視覺動畫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved