我發現DrawBitMap花費50-60毫秒來繪製三個位圖,其中一個是佔據整個屏幕的矩形,一個是圓形,另一個是路徑。我的位圖是通過使用Canvas.drawPath,drawRect和drawCircle在空白位圖上創建的,Bitmap.Config爲ARGB_8888。 我正在使用ARGB_8888使背景可見以獲得分層效果。 因爲我認爲drawBitmap將是一個非常簡單的操作,所以我驚訝地發現需要花費大約50ms的時間。有人可以指導我是否有任何根本的錯誤,我正在做。下面是我的代碼使用ARGB_8888時的DrawBitMap非常慢使用ARGB_8888
創建空白位圖
Rectangle = Bitmap.createBitmap(320,480,Bitmap.Config.ARGB_8888);
Circle = Bitmap.createBitmap(70,70,Bitmap.Config.ARGB_8888);
Leaf1 = Bitmap.createBitmap(20,30,Bitmap.Config.ARGB_8888);
在適當的位圖
Canvas c = new Canvas(Rectangle);
Paint p = new Paint();
p.setAntiAlias(true);
p.setColor(0xff6e8b3e);
c.drawRect(0,0,320,480,p);
Canvas c = new Canvas(Circle);
Paint p = new Paint();
CirclePath = new Path();
p.setAntiAlias(true);
p.setColor(0xffcd661d);
System.out.println("x = "+x+" y = "+y);
CirclePath.addCircle(50,50,10,Path.Direction.CW);
c.drawPath(CirclePath,p);
Canvas c = new Canvas(Leaf1);
Paint paint = new Paint();
Path path = new Path();
paint.setAntiAlias(true);
path.moveTo((float)184.37,(float)219.15);
path.cubicTo((float)188.32,(float)219.15,(float)192.88,(float)220.44,(float)195.62,(float)223.54);
path.cubicTo((float)197.84,(float)226.05,(float)203.2,(float)229.84,(float)198.18,(float)245.98);
繪製位圖的OnDraw
canvas.drawBitmap(Rectangle,0,0,p);
canvas.translate(x,y); // For animation effect
canvas.drawBitmap(Circle,0,0,p);
canvas.drawBitmap(Leaf1,0,0,p);
繪製形狀
現在,當我記錄這三個drawBitMap所花費的時間時,我發現它花費了大約50ms。 代碼中是否存在大的時間錯誤。將Bitmap.Config更改爲RGB_565會使時間縮短到8毫秒左右,但後面的背景不可見,並且我在路徑周圍出現一個黑框
是的alpha通道正在使用,因爲我想背景在圖像周圍正確顯示。是的,目標是做旋轉和縮放,所以我正在使用抗鋸齒。基本上我正在設計一個SVG播放器,它執行矢量圖形動畫,以便使用drawPath函數構造位圖,然後在屏幕上爲每幀 – 2010-12-07 10:41:51