我最終爲GradientDrawable創建了一個位圖緩存系統。 (不想緩存以此drawable作爲背景的視圖)。
這給動畫提供了很大的速度提升。
public class PGradientDrawable extends GradientDrawable {
private int firstColor;
private int secondColor;
private Paint cachePaint = new Paint();
private Canvas cacheCanvas = new Canvas();
private Bitmap bitmap;
public PGradientDrawable(Orientation angle, int[] intarray) {
super(angle, intarray);
firstColor = intarray[0];
secondColor = intarray[1];
}
public boolean isBackground = false;
boolean firstTime = true;
public void buildCache(int width, int height) {
if (bitmap != null)
bitmap.recycle();
try {
bitmap = Bitmap
.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap.setDensity(context.getResources().getDisplayMetrics().densityDpi);
cacheCanvas.setBitmap(bitmap);
// TODO shader must be what the GradientDrawable is,type
// orientation..
cachePaint.setShader(new LinearGradient(0, 0, width, height,
firstColor, secondColor, Shader.TileMode.CLAMP));
cacheCanvas.drawPaint(cachePaint);
} catch (OutOfMemoryError e) {
// clear the bitmap force draw() to repaint
bitmap = null;
}
}
@Override
public void draw(Canvas canvas) {
if (bitmap != null) {
// Draw the bitmap
canvas.drawBitmap(bitmap, 0, 0, null);
return;
}
super.draw(canvas);
}
}
你試圖延長GradientDrawable和延緩與Drawable.Callback.scheduleDrawable平局(...),從未使用過它自己,但它可能會在這裏工作 – bgs
嗯,我會嘗試,now.scheduleDrawable塊可繪製到渲染到一個新的狀態,直到它觸發? – weakwire
可能會忽略繪製並注入自己的邏輯,設置時= 0 ...如果我理解正確... – bgs