2011-06-30 25 views
5

Làm cách nào để thực hiện việc này? Ai đó có thể cho tôi một phác thảo?Tăng gấp đôi bộ đệm trong Java trên Android với canvas và surfaceview

Từ những gì tôi đã tìm thấy trên mạng, nó có vẻ như trong chạy của tôi() chức năng:

  1. tạo một bitmap
  2. tạo ra một vải và đính kèm nó vào bitmap
  3. lockCanvas()
  4. lệnh gọi vẽ (canvas) và vẽ bitmap vào đệm trở lại (làm thế nào ??)
  5. unlockCanvasAndPost()

Điều này có đúng không? Nếu có, tôi có thể giải thích một chút; các bước này có ý nghĩa gì và làm cách nào để triển khai chúng? Tôi chưa bao giờ lập trình cho Android trước đây vì vậy tôi là một noob thực sự. Và nếu nó không chính xác, làm thế nào để tôi làm điều này?

Trả lời

16

Nó đã được đệm đôi, đó là những gì mà cuộc gọi unlockCanvasAndPost() thực hiện. Không cần tạo bitmap.

+0

Tôi không hiểu lắm. Vì vậy, tôi chỉ cần vẽ tất cả mọi thứ tôi cần giữa khóa và mở khóa và ... đệm đôi xảy ra trên riêng của nó? Tôi không cần phải vẽ trước khi tôi khóa? Xin lỗi, tôi cần điều này được giải thích theo cách cơ bản nhất có thể ... – Kalina

+7

@TheBeatlemaniac: Khi bạn vẽ trên một 'Canvas' sau khi' lockCanvas() 'đã được gọi, bạn đang thực sự vẽ nội dung trên * next * khung, trong khi khung * hiện tại * đang được hiển thị. Một cuộc gọi 'unlockCanvasAndPost()' sẽ chuyển bộ đệm khung tiếp theo bằng bộ đệm khung hiện tại để hiển thị một 'Canvas' được cập nhật. – Wroclai

+0

Phần bitmap có ích nếu bạn muốn phóng to/thu nhỏ và di chuyển vùng "worskpace" xung quanh. – TheRealChx101

2

Các bước từ Android Developers Group nói rằng bạn cần một khung đệm, mà tất cả các điểm vẽ được vẽ lên.

Bitmap buffCanvasBitmap; 
Canvas buffCanvas; 

// Creating bitmap with attaching it to the buffer-canvas, it means that all the changes // done with the canvas are captured into the attached bitmap 
tempCanvasBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
tempCanvas = new Canvas(); 
tempCanvas.setBitmap(tempCanvasBitmap); 

// and then you lock main canvas 
canvas = getHolder().lockCanvas();    
// draw everything you need into the buffer 
tempCanvas.drawRect.... // and etc 
// then you draw the attached bitmap into the main canvas 
canvas.drawBitmap(tempCanvasBitmap, 0, 0, drawView.getPaint()); 
// then unlocking canvas to let it be drawn with main mechanisms 
getHolder().unlockCanvasAndPost(canvas); 

Bạn đang nhận được bộ đệm chính mà bạn đang vẽ mà không nhận được canvas đệm kép khác nhau 'trên khóa của mỗi người giữ.

Các vấn đề liên quan