2011-12-26 6 views
7

2.3.3 left, ICS on right (emulator). Notice the gradient fade effect difference inside the red box.vấn đề tương thích Gradient - ICS mặc định là màu sắc ít hơn tất cả các phiên bản trước của Android

Gingerbread (2.3.3) giả lập trái, ICS (4.0.3) giả lập đúng. Chú ý hiệu ứng gradient mờ dần trong hộp màu đỏ (mở trong cửa sổ riêng biệt để xem hình ảnh có kích thước đầy đủ).

Mainview nền:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/app_bg" 
android:orientation="vertical" > 

... 

</LinearLayout> 

app_bg.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient android:startColor="#000" android:centerColor="#333" 
    android:endColor="#000" android:angle="270" /> 
</shape> 

gì đang gây ra vấn đề này? Làm thế nào để sửa lỗi này, do đó, các gradient ICS sẽ trông mịn như phiên bản 2.3.3? Vấn đề chỉ xảy ra trên giả lập?

+0

Màn hình máy chủ của bạn (tức là màn hình trình mô phỏng được hiển thị) chắc chắn là 32bpp? –

+0

Ý của bạn là gì? Cả hai trình giả lập đều chạy trên cùng một màn hình tại thời điểm chụp ảnh màn hình. –

+0

Sai lầm của tôi, tôi không nhận thấy màn hình 2.3 cũng được mô phỏng. –

Trả lời

0

Chỉ cần xác minh trên thiết bị ICS 4.0.3: đây là vấn đề mô phỏng chỉ.

+1

không có nó. Tôi có cùng một vấn đề trên lưu ý thiên hà ... – syloc

1

Tôi nghĩ rằng vấn đề là Android là (ở bên phải) vẽ gradient sử dụng ít màu hơn. Tôi tin rằng bạn muốn kích hoạt phối màu để giúp che giấu sự sụt giảm độ sâu màu. Có thể thấy câu trả lời này link

Tôi không chắc chắn về cách hoạt động, nhưng tôi tin rằng Android đôi khi sẽ mặc định ở chế độ RGB_565, ngay cả khi thiết bị có khả năng 24 bit màu.

+0

Có, có vẻ như đó là một số lỗi mặc định cho số lượng màu ít hơn mức cần thiết để vẽ chính xác độ dốc. Nhưng tại sao nó xảy ra trên ICS và làm thế nào để thay đổi nó-Tôi không có ý tưởng và tôi đã không tìm thấy một giải pháp, hoặc. Cho phép hy vọng ai đó biết câu trả lời đăng bài ở đây ... Đặt 'window.setFormat (PixelFormat.RGBA_8888); 'trong' onAttachedToWindow() 'tại hoạt động mà nền được vẽ không khắc phục được sự cố. –

0

Tôi thấy nhận xét của bạn rằng việc sử dụng PixelFormat.RGBA_8888 không giúp ích gì.
Bạn cũng có thể thử thêm cờ hoà sắc: window.addFlags(WindowManager.LayoutParams.FLAG_DITHER);.
Bạn có thể xem câu trả lời liên quan trước đây của tôi về phối màu và màu sắc ở đây:
Awful background image quality in Android

+1

Tôi đã thêm 'getWindow(). SetFormat (PixelFormat.RGBA_8888);' và 'getWindow(). AddFlags (WindowManager.LayoutParams.FLAG_DITHER);' vào phương thức 'onCreate' của tôi và nó vẫn không khắc phục được sự cố (doesn ' t vấn đề nếu nó là trước hoặc sau 'super.onCreate (savedInstanceState);'). –

+1

Rất lạ, điều duy nhất tôi có thể nghĩ là nguyên nhân vấn đề của bạn trong trường hợp đó là nếu động cơ tối ưu hóa độ phân giải quá nhiều, nếu bạn đặt màu gradient là # FF000000 thay vì chỉ # 000, có thể có thể hoạt động, nhưng có vẻ như trục trặc trong ICS. – Jave

+0

Đã thử 6 mã màu của ký tự và 8 mã màu ký tự (alpha dưới dạng FF) nhưng vẫn, gradient trông giống như từ –

1

ICS automaticly thêm hiệu ứng gradient nếu tăng tốc phần cứng được kích hoạt trong áp dụng. Nó cũng có thể buộc tăng tốc phần cứng cho tất cả các ứng dụng, bạn sẽ nhận thấy rằng một số ứng dụng sẽ có nền gradient thay vì màu đen.