2011-12-23 36 views
5

Tuyên bố từ chối: đây là sự cố lạ chỉ xảy ra trong Kindle Fire (cho đến nay).Kindle Fire thay đổi Độ phân giải màn hình tại một số điểm…

Công nghệ được tham gia: Android SDK, Eclipse, LibGDX.

Tôi có một ứng dụng tương đối đơn giản chạy với LibGDX. Cách LibGDX hoạt động là có một chuỗi OpenGL sẽ gọi Create() (một lần) và sau đó Render() nhiều lần nhất có thể (để bạn có thể thực hiện kết xuất ...). Vì vậy, khi bạn khởi tạo thiết bị, phương thức "Create()" của bạn được gọi và sau đó khi bề mặt OpenGL được khởi tạo (tất cả điều này xảy ra tự động), Render() của bạn bắt đầu được gọi.

Nếu bối cảnh OpenGL bị mất, bị hủy, vv, phương thức Resize (chiều rộng, chiều cao) của bạn được LibGDX gọi.

Cho đến nay. Tốt quá.

Bây giờ tôi đã gặp phải một vấn đề lạ với Kindle Fire, nơi mọi thứ chỉ mất vài pixel hoặc "cắt". Kindle Fire có một "softbar" ở dưới cùng của màn hình (20 pixel) mà bạn không thể ẩn hoặc bỏ qua, đó là "loại ok" vì thiết bị không có nút vật lý. Bạn đang mong đợi để chạm vào thanh mềm này và nhận được một thanh lớn hơn để quay trở lại, về nhà, vv Theo Amazon, thanh này không thể được gỡ bỏ. (không phải là 100% rõ ràng nhưng không ai đã tìm thấy một cách - không phải là vi phạm các quy tắc của Amazon). Ứng dụng duy nhất mà tôi đã nhìn thấy sẽ xóa đó là Trình phát video của Amazon cho các video được phát trực tuyến từ Đám mây của Amazon chỉ. Vì vậy, như bạn có thể thấy, dường như không có cách nào để "vĩnh viễn" ẩn thanh đó.

Vì vậy, nếu thanh ở đó, trạng thái màn hình thực của bạn không phải là độ phân giải phần cứng 1024x600 (ngang) nhưng 1024x580. Vì vậy, tôi đã thêm một số khai thác gỗ với các phương pháp của tôi để xem những gì đang xảy ra, và đã rất ngạc nhiên với điều này ... (nhớ create(), render() và thay đổi kích thước() phương pháp):

12-23 15:17:04.119: I/myapp(19921): SCREEN HEIGHT AT CREATE(): 600 
[snip other unrelated log stuff] 
12-23 15:17:04.673: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 600 
[snip other unrelated log stuff] 
12-23 15:17:04.705: I/myapp(19921): MyApp - Resize() Called. 
12-23 15:17:04.705: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 580 

Vì vậy, màn hình đã được "thay đổi kích thước" của Kindle Fire, "tại một số điểm".

Có ai đi qua thứ gì đó như thế này không?

Đây là ảnh chụp màn hình (chú ý thanh màu đen ở trên cùng, không được tôi thêm vào!). Hãy tha thứ cho tôi vì làm mờ hình ảnh nhưng đây là dự án của khách hàng và tôi không thể tiết lộ bất cứ điều gì.

enter image description here

Những niềm vui một phần bắt đầu khi đôi khi, thanh sẽ không có mặt ở đó và ứng dụng sẽ trông giống như sau (một lần nữa, sry cho mờ). Chú ý cách thanh trên cùng là không có ...

enter image description here

Khi một cuộc kiểm tra chặt chẽ hơn của cả hai bức ảnh, bạn có thể nói rằng phía dưới (mà phải là giống nhau), không phải là. Các kindle đang làm những điều kỳ lạ.

Bất kỳ ý tưởng nào?

Nội dung ban đầu được đóng gói là 1024x600 nhưng chúng tôi đã thay đổi (580 giờ) và giả định rằng chế độ xem hiện là 1024x580 nhưng tôi tự hỏi liệu có ai tìm cách tốt hơn để giải quyết vấn đề này không?:)

lưu ý: chúng tôi có android: theme = "@ android: style/Theme.NoTitleBar.Fullscreen" trong tệp kê khai. Không làm gì cả.

Xin cảm ơn trước.

+1

Tôi không thể giúp bản thân vấn đề Kindle, nhưng phương thức resize() có thể được gọi bất kỳ lúc nào và không liên quan đến mất ngữ cảnh. Mất bối cảnh được biểu thị bằng một lời gọi để tiếp tục(). – badlogic

+0

@badlogic hi Mario;) (Gryzor ở đây). Vâng, chúng tôi đang chờ xử lý thay đổi kích thước() nhưng điều này có vẻ là vấn đề về Kindle Fire (được báo cáo bởi những người khác). Amazon đã làm một cái gì đó khó chịu trong đó ...: S Cảm ơn tho ' –

Trả lời

6

lửa Kindle có một hành vi kỳ lạ, một khi tải ứng dụng có vẻ như nó "di chuyển" màn hình 20px lên (Softbar chiều cao) do đó hình ứng dụng của bạn một vài điểm ảnh tắt hoặc cắt. Đó là vì khi bạn tạo GLSurfaceView và đặt renderer, cuộc gọi của bạn sẽ gọi hai lần đến phương thức onSurfaceChanged.

Lần đầu tiên, sau khi onSurfaceCreated được gọi, với giá trị độ phân giải 1024x600 và lần thứ hai sau lần gọi đầu tiên tới onDrawFrame với giá trị 1024x580.

Giải pháp, bạn phải kiểm soát hai cuộc gọi đến onSurfaceChanged và thay đổi kích thước khung nhìn opengl.

private static boolean appStarted = false; 
    ... 

    private static class Renderer implements GLSurfaceView.Renderer 
    { 
     public void onSurfaceChanged(GL10 gl, int width, int height) 
     { 
      if (!appStarted) 
      { 
       //Initialization (Resolution 1024x600) 
      } 
      else 
      { 
       //Second call, screen resolution changed (Resolution 1024x580) 
       //Resize(width,height) 
      } 
      appStarted = true; 
     } 

     public void onDrawFrame(GL10 gl) { 
     //Render() 
     } 

     public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     //Create() 
     } 
    } 
+0

Tôi sẽ xem xét điều này, cảm ơn. Khi tôi xoay sở, tôi sẽ cho bạn biết. –

+1

Tôi hy vọng nó giúp bạn, tôi đang sử dụng mã đó để quản lý vấn đề này trong các dự án của tôi :) – gergonzalez

0

Tôi chạy đến vấn đề này thời gian gần đây và đã tự hỏi nếu bạn đã tìm thấy một giải pháp.

Thanh màu đen xuất hiện vì ứng dụng của bạn báo cáo chiều cao cao 580 pixel. OpenGL có một hệ tọa độ, trong đó (0,0) nằm ở góc dưới bên trái của màn hình.

Vì lý do nào đó, thanh mềm của Kindle không di chuyển EGLSurface lên 20 pixel. Thay đổi kích thước tuy nhiên làm giảm kích thước 20px, để lại thanh màu đen. Vì vậy, vấn đề là vị trí của EGLSurface. Và có vẻ như đôi khi, do thời gian, việc di dời xảy ra sau khi thay đổi kích thước (làm cho thanh màu đen biến mất).

+0

Giải pháp là sử dụng giải pháp trên: http://stackoverflow.com/a/9225218/2684 –

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