2013-01-24 24 views
5

Tôi đang sử dụng triển khai SurfaceView mặc định, mã có thể được tìm thấy here (đây là ví dụ về ứng dụng vẽ ngón tay, tôi vừa tắt và vẽ hình ảnh). Có 3 chính riêng lớp -Tự động thay đổi hình ảnh trong SurfaceView như thế nào?

  1. Tích Cực Class (SurfaceViewSampleActivity)
  2. SurfaceView (CanvasView)
  3. Chủ đề lớp (UIThread).

SurfaceView vẽ hình ảnh (Bitmap) được đặt trong hàm tạo. Tôi cũng đã triển khai chức năng nơi người dùng có thể gọi ứng dụng Máy ảnh và chụp ảnh. Hình ảnh phải hoán đổi hình ảnh mặc định (trên hình ảnh bộ dựng hình SurfaceView).

tôi đã cố gắng để tạo ra một phương pháp đơn giản trong lớp học hoạt động của tôi và thiết lập các bitmap, nhưng điều này không làm việc:

private void setImage() { 
    view.bitmap = this.mImageBitmap; 

} 

Tôi nghĩ rằng SurfaceView chủ đề có thể được sử dụng bitmap vì vậy tôi đã cố gắng để khóa biến:

private void setImage() { 
    synchronized (view.bitmap) { 
     view.bitmap = this.mImageBitmap; 
    } 
} 

Ứng dụng cũng gặp sự cố.

SurfaceView phương pháp bốc thăm:

protected void onDraw(Canvas canvas) { 
    setPaintProperties(); 

    if (canvas != null) { 
     canvas.drawColor(Color.WHITE); 

     synchronized (this.bitmap) { 
      canvas.drawBitmap(this.bitmap, 0, 0, new Paint()); 
     } 

    } 
} 

Có cách nào để thay đổi biến bitmap trong SurfaceView sau các nhà xây dựng đã được gọi là?

+0

thử mà không cần đồng bộ hóa (this.bitmap) –

+0

Sự cố ... Cảm ơn bạn đã phản hồi nhanh – user2003066

+0

Vui lòng đăng ngăn xếp ngăn xếp từ Logcat. – acj

Trả lời

0

Phương pháp chạy của bạn trông như thế nào. Tôi sẽ xem xét mẫu Lunar Lander. Bạn cần khóa và mở khóa khung hình.

@Override 
    public void run() { 
     while (mRun) { 
      Canvas c = null; 
      try { 
       c = mSurfaceHolder.lockCanvas(null); 
       synchronized (mSurfaceHolder) { 
        if (mMode == STATE_RUNNING) updatePhysics(); 
        doDraw(c); 
       } 
      } finally { 
       // do this in a finally so that if an exception is thrown 
       // during the above, we don't leave the Surface in an 
       // inconsistent state 
       if (c != null) { 
        mSurfaceHolder.unlockCanvasAndPost(c); 
       } 
      } 
     } 
    } 
Các vấn đề liên quan