2011-01-22 23 views
19

Tôi đã cố gắng làm cho android hòa mình vào hình nền của một hoạt động - cho đến nay mà không thành công. Tôi không biết có gì sai.android: dither = "true" không hoà sắc, có gì sai?

Đây là những gì tôi đã làm:

Yếu tố gốc của bố trí hoạt động của tôi là một LinearLayout:

<LinearLayout android:id="@+id/AbsoluteLayout01" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:gravity="center_horizontal" 
android:background="@drawable/background_dither"> 

nơi tôi thêm @ drawable/background_dither làm hình nền. tôi đặt một tập tin XML "background_dither.xml" trong drawable-hdpi với nội dung sau:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/backimg" 
android:src="@drawable/background" 
android:dither="true" 
android:antialias="true" /> 

mà tham chiếu background.png hình ảnh thực tế trong drawable-hdpi. Hình ảnh, bao gồm một gradient màu lớn, không hiển thị, nhưng với dải màu nặng. Từ những gì tôi đã học được từ SDK, điều này có thể được giảm nhẹ bằng cách sử dụng định nghĩa hình ảnh proxy ở trên cùng với việc chỉ định android: dither = "true". Tuy nhiên, điều này hoàn toàn không có hiệu lực.

Tôi thiếu gì để làm việc phối màu?

EDIT: tải lên sources here

EDIT2: Sau khi không ai trong số các phương pháp gợi ý giúp để thoát khỏi dải màu, sau khi đọc this blog post from Romain Guy tôi đã có ý tưởng để kiểm tra xem nền PNG tôi có một kênh alpha. Nó không. Sau khi thêm một, android thực sự dường như sử dụng RGB8888, như đã nói trong bài viết và dải đã biến mất (cũng cho 2.2). Vẫn tự hỏi tại sao các phương pháp khác không hiệu quả.

EDIT3: Người ta phải đảm bảo rằng PNG không chỉ có kênh alpha, mà còn ít nhất một pixel có giá trị alpha! = FF, nếu không công cụ xây dựng android sẽ lại xóa bitmap đó thành chỉ mục bảng không có kênh alpha.

Trả lời

0

Rất nhiều người có cùng một vấn đề báo cáo rằng thiết lập SetDither (true) trên tài nguyên có thể drawable của bạn trong mã Java hoạt động khi thuộc tính XML không. Trong trường hợp này, nếu bạn có thể tham chiếu đến LinearLayout của mình trong phương thức onCreate, hãy thử

linearLayout.getBackground(). SetDither (true).

Một thay thế là để thử thiết lập một định dạng pixel khác nhau như mô tả ở đây:

http://stuffthathappens.com/blog/2010/06/04/android-color-banding/

Chúc may mắn!

+0

Cảm ơn. Đã thử cả hai tùy chọn. Không ai trong số họ thay đổi kết xuất, vì vậy tôi đoán nó vẫn không hoạt động. :-( – machtnix

3

Cố gắng đưa dòng này

getWindow().setFormat(PixelFormat.RGBA_8888); 

ngay sau super.onCreate() và xem nếu nó giúp.

+1

Cảm ơn, nhưng xin lỗi, không, không thấy bất kỳ sự khác biệt nào.Tôi đã tải lên mã tại đây http://rapidshare.com/files/444144083/lottofee.zip Có thể ai đó có thể phát hiện ra sự cố. – machtnix

+0

Không có sự khác biệt: ( –

23

Đã khắc phục sự cố này quá ngày hôm nay và đã tìm thấy và sử dụng giải pháp của bạn: Tạo png trong photoshop với bộ trong suốt VÀ có ít nhất một pixel sử dụng alpha. Trên thực tế những gì tôi đã làm là thiết lập layer thành Opacity 99%. Không ảnh hưởng đến màu sắc hay bất cứ điều gì và làm cho trình biên dịch Android rời khỏi png của tôi một mình.

+0

Đây là câu trả lời đúng Cảm ơn bạn, nó đã giúp tôi rất nhiều :) –

+0

Nó làm việc cho tôi, cảm ơn! –

+0

Dude, bạn đá, cảm ơn bạn! – tokudu

0

Trên Android 2.2.1 trở xuống, có một lỗi khiến cho phối màu bị tắt nếu tính năng lọc được bật. Trên Android 2.3.3 và 3.0, vấn đề này dường như đã được sửa.Tôi không chắc chắn nếu điều tương tự có thể đúng với antialias như bạn đã kích hoạt.

2

Tôi cũng gặp sự cố này, tôi đã cố áp dụng tính năng chín bản vá cho hình nền.

Hy vọng sự trợ giúp này

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