2012-02-04 10 views
8

Tôi có thiết bị có độ phân giải 800x480. Khi tôi tạo GLSurfaceView, tôi nhận được cuộc gọi onSurfaceChanged với 533x320 (rõ ràng với 1,5 công cụ sửa đổi HDPI được áp dụng) và bề mặt được nâng cấp. Vì vậy, khi tôi vẽ một đường dày 1 pixel thì trông thật tệ, và tôi không thể vẽ được hình ảnh hoàn hảo.Mở rộng chế độ xem bề mặt OpenGL cho các DPI khác nhau

Điều tôi muốn có là độ phân giải gốc (800x480).

Xem được tạo ra theo cách này (như trong các mẫu NDK OpenGL), trong onCreate Hoạt động của:

this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | 
      WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | 
      WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | 
      WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 

    view = new MyGLSurfaceView(this); 
    setContentView(view); 

tôi không sử dụng bất kỳ bố trí, vv

+0

bạn có thể gửi một số mã, như cách bố trí xem GLSurface này được sử dụng trong? Tôi không thể rút ra câu trả lời từ không khí mỏng. –

+0

Chắc chắn, tôi sẽ thêm nó vào câu hỏi. – Mark

Trả lời

4

Tôi tìm thấy giải pháp: khi tôi thêm

<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/> 

để AndroidManifest.xml, tôi nhận được resolution.To thích Thành thật mà nói, Android là rất nền tảng lạ đối với tôi sau vài năm với iOS ...

giải pháp tìm thấy ở đây: MonoDroid apps don't use correct density drawables

+0

Ồ, đó là phân mảnh thiết bị Androids cho bạn tại nơi làm việc ... Dù sao, hãy gọi điện thoại tốt trên tệp kê khai. – Erik

0

Gốc của vấn đề dường như nằm với lệnh onSurfaceChanged truyền xuống chiều rộng và chiều cao (có lẽ đã thay đổi).

Không có gì sai với mã xây dựng chế độ xem, nhưng chúng tôi muốn đảm bảo rằng mã được tạo ở độ phân giải thiết bị thực tế. Có thể gọi setLayout (int width, int height) một cách rõ ràng với chiều rộng và chiều cao mong muốn có thể giúp bạn tiết kiệm hơn ...

Rõ ràng, bạn phải xác định kích thước màn hình vật lý thực tế trước khi làm như vậy. Và đặt cược tốt nhất của bạn để có được các pixel vật lý thực tế là widthPixels và heightPixels từ DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html

Nếu điều đó không hiệu quả, có thể thử mã trên một thiết bị khác có thể mang lại kết quả chính xác. Trong trường hợp này, nó có thể là một vấn đề thiết bị phụ thuộc vào ...

+0

Tôi đã thử, nhưng đáng ngạc nhiên DisplayMetrics cũng có vẻ là sai. Kết quả cho HTC Desire Z: widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000 mật độ 1.500000 densDPI 240 (thiết bị có độ phân giải gốc 800x480) – Mark

+0

Cảm ơn bạn đã trợ giúp, Erik, DisplayMetrics là một gợi ý tốt! – Mark