我做在本地代碼中的一些位圖動畫,所以我需要重繪ImageView的每一幀:View.invalidate()非常慢。備擇方案?
class MyImageView extends ImageView
{
...
protected void onDraw(Canvas canvas)
{
native_drawStuff(handle, canvas);
invalidate();
}
}
似乎一切都很好,除了Traceview表明這一點:
我不瞭解你,但這似乎有點荒謬。 native_drawStuff()設置位圖的每個像素,然後將位圖繪製到畫布上,並且簡單的invalidate()調用幾乎需要4倍於?位圖也不小(RGBA_8888和從50k到300k像素的任何位置)。
鑑於我需要重新繪製整個ImageView的每一幀,有沒有更好的方法來做到這一點?我所看到的唯一建議是僅使視圖中需要重繪的部分無效,但對我而言,這是整個事情。
你爲什麼在onDraw()失效?這表明你可能不知道如何使無效的作品? – Simon
我從onDraw()失效,因爲在邏輯上它應該實現我的動畫的最大刷新率。該文檔對無效()進行了說明:「如果視圖可見,onDraw(android.graphics.Canvas)將在未來的某個時刻調用」,這正是我想要的行爲。如果不經常失效,動畫不會更新。 – foo64