想要實現 TextView 文字從模糊漸變清晰的動畫,許多開發者會嘗試對 TextView 截圖成 Bitmap 再做高斯模糊,但發現效果不佳或無法動態更新。關鍵在於理解:介面上的文字本質上也是像素,同樣可以用 Bitmap 繪製並套用模糊半徑動畫。
不要試圖一次性生成模糊圖片,而是採用幀動畫策略:
Handler、ValueAnimator 或 AsyncTask 定時觸發(如每 16ms 一幀)。RenderScript 高斯模糊(ScriptIntrinsicBlur)。setText("")),避免雙重顯示。// 獲取 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 抖動。RenderEffect(Android 12+)或 BlurMaskFilter 簡化實作。掌握「每幀靜態模糊 + 半徑漸變」的核心邏輯,即可流暢實現文字從模糊到清晰的視覺動畫。