2012-06-17 36 views
5

Tôi hiện đang làm việc trên một hình nền sống rất chuyên sâu và không xử lý xoay màn hình rất tốt.Live Wallpaper Screen Rotation

Trên thực tế, hình nền bị hủy và hiển thị màn hình trống mà không cần gọi trênSurfaceChanged!

Dưới đây là những gì tôi có trong phương pháp onSurfaceChanged:

@Override 
    public void onSurfaceChanged(SurfaceHolder holder, int format, 
      int width, int height) { 
     // TODO Auto-generated method stub 
     super.onSurfaceChanged(holder, format, width, height); 

     mRatio = (float) width/height; 
     if (mRatio > 1) { 
      orientation = 0; 
     } 
     if (mRatio < 1) { 
      orientation = 1; 
     } 
     setRunning(true); 
     Log.i(TAG, "Screen Rotation..."); 
     mHandle.post(r); 
    } 

Tôi tích cực phương pháp này không được gọi vì không có thông tin đăng nhập.

Tại sao điều này xảy ra và một số kỹ thuật xử lý xoay màn hình là gì? Có thể là hình nền sống của tôi quá sâu đến mức không thể gọi được khoảng trống?

Ngoài ra, onVisibilityChanged không được gọi là tốt và khi tôi mở ứng dụng trên giả lập, không có thông tin đăng nhập:

@Override 
    public void onVisibilityChanged(boolean visible) { 
     // TODO Auto-generated method stub 
     super.onVisibilityChanged(visible); 
     if (visible) { 
      setRunning(true); 
      Log.i(TAG, "Visible..."); 
      mHandle.postDelayed(r, 2000); 
     } else { 
      setRunning(false); 
      Log.i(TAG, "Invisible..."); 
      mHandle.removeCallbacks(r); 
     } 
    } 
+0

Bạn có thể đăng thêm mã không? Cần phải biết tất cả công việc nặng nhọc được thực hiện ở đâu. Trong Live Wallpaper của tôi, cả onSurfaceChanged và onVisibilityChanged được gọi trong khi xoay màn hình. Ngoài ra, kiểm tra bạn LogCat cho một cái gì đó như "Timeout chờ hình nền để bù đắp" trong quá trình định hướng thay đổi. – Ole

Trả lời

1

Trong biểu hiện của bạn, tuyên bố:

<activity android:name=".YourActivityName" 
       android:configChanges="keyboardHidden|orientation" 
    </activity> 

bạn onSurfaceChanged - phương thức chỉ được gọi nếu khai báo thuộc tính configChanges trong tệp kê khai!

Về vấn đề thứ hai của bạn: onVisibilityChanged không phải là điều bạn mong chờ từ tên:

Called when the window containing has change its visibility (between GONE, INVISIBLE, and VISIBLE). Note that this tells you whether or not your window is being made visible to the window manager; this does not tell you whether or not your window is obscured by other windows on the screen, even if it is itself visible.

Bạn cần phải kiểm tra xem ứng dụng của bạn là "nhìn thấy" đối với người dùng thông qua onPause()onResume()

+0

Cảm ơn bạn đã phản hồi, tôi đã thay đổi dịch vụ hình nền động của mình thành: - và nó không hoạt động: ( – Denizen

+0

Vấn đề của tôi là im liên tục khởi tạo 20 hình chữ nhật và có 40 hoặc hơn nếu câu lệnh cho một nimating chúng. Các câu lệnh if liên tục được kiểm tra ngay cả khi im thực hiện hoạt ảnh làm chậm hiệu năng – Denizen

+0

Câu trả lời ở trên không áp dụng cho hình nền động, nhưng đối với các ứng dụng sử dụng SurfaceView. Vì vậy, việc thiết lập thuộc tính configChanges sẽ không làm gì cả. Vui lòng đăng thêm mã .. – Ole