Tạo một màu mới có thể vẽ được


77

Tôi đang cố gắng chuyển đổi giá trị hex thành int để có thể tạo màu mới có thể vẽ được. Tôi không chắc liệu điều này có thể thực hiện được hay không, nhưng theo tài liệu thì nó nên như vậy. Nó rõ ràng yêu cầu

public ColorDrawable (int color)

Đã thêm vào API cấp 1 Tạo một ColorDrawable mới với màu được chỉ định.

Các thông số màu Màu sắc để vẽ.

Vì vậy, mã của tôi không hoạt động vì tôi nhận được lỗi int: "FF6666" không hợp lệ. Có ý kiến ​​gì không?

int decode = Integer.decode("FF6666");
ColorDrawable colorDrawable = new ColorDrawable(decode);

nếu một trong những câu trả lời được cung cấp giải quyết được câu trả lời của bạn, hãy nghĩ đến việc xác nhận nó như một câu trả lời được chấp nhận để người kia biết vấn đề của bạn đã được giải quyết.
HpTerm

Có một lớp tiện ích đẹp android.graphics.Color có một phương thức parseColor. Thay vào đó, hãy thử sử dụng nó và đừng quên thêm tiền tố sắc (#) vào biểu thị chuỗi màu của bạn, ví dụ: # FF6666
Игорь Комаров

Câu trả lời:


163

Vì bạn đang nói về hex, bạn phải bắt đầu với 0xvà đừng quên độ mờ.

Về cơ bản: 0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666);

Bạn cũng có thể tạo tệp color.xml mới vào / res và xác định các màu như:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#FF6666</color>
</resources>

và chỉ cần lấy màu được xác định trong R.color.mycolor

getResources().getColor(R.color.mycolor)

18
những gì tôi cần là new ColorDrawable(getResources().getColor(R.color.red)))nhờ
Shareef

8
ContextCompat.getColor (getContext (), R.color.red) cho compatiability
toshkinl

chúng ta có thể thay đổi màu nền bằng cách sử dụng này cd đó là colorDrawable kiểu biến

Lưu ý nhỏ, bạn có thể sử dụng ColorDrawable cho các đối tượng yêu cầu Drawable như DividerItemDecoration.setDrawable (); thay vì sử dụng bố cục có thể vẽ thực tế, bạn có thể chuyển ColorDrawable để chỉ cần thay đổi màu của dải phân cách.
6rchid

21

Để sử dụng với ContextCompat và sử dụng lại màu, bạn có thể làm như sau:

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));

Nghĩa là thisgì?
Christian

@Christian Context
JpCrow 16/1018

10

Nó sẽ như thế này ...

ColorDrawable cd = new ColorDrawable(0xffff6666);

Lưu ý rằng tôi đã sử dụng 8 chữ số hex, không phải 6 chữ số hex. làm tăng thêm tính minh bạch


Nhưng bạn muốn có các giá trị như vậy trong các tệp 'res' thích hợp, không phải mã cứng. Câu trả lời Enrichman xong :)
Amigo

Làm thế nào được cdsử dụng trong mối quan hệ với Toast?
Azurespot

6

Bằng cách làm theo lời khuyên trên, để trở thành một bản tóm tắt của câu hỏi này:

  1. ColorDrawable colorDrawable = new ColorDrawable ( Color.parseColor ("# ce9b2c")); `

  2. ColorDrawable colorDrawable = new ColorDrawable ( 0xFFCE9B2C ); Lưu ý rằng có 8 chữ số hex, không phải chữ số 6 hex, không hoạt động. Trường hợp tất cả

  3. ColorDrawable colorDrawable = new ColorDrawable (ContextCompat.getColor (mContext, R.color.default_color));

Lựa chọn tùy thuộc vào bạn!


Nếu tôi có một mảng màu thì?
Hoàng tử Dholakiya

1
@DPrince , Bạn có thể thử cái này, int color = Color.HSVToColor(new float[]{...}) rồi sử dụng ở trên.
BertKing

4

Tôi nghĩ bạn phải sử dụng:

public static int parseColor (Chuỗi colorString)

Đã thêm vào API cấp 1 Phân tích cú pháp chuỗi màu và trả về màu-int tương ứng. Nếu không thể phân tích cú pháp chuỗi, hãy ném một ngoại lệ IllegalArgumentException. Các định dạng được hỗ trợ là: #RRGGBB #AARRGGBB đỏ, xanh lam, xanh lá cây, đen, trắng, xám, lục lam, đỏ tươi, vàng, nhạt, sẫm, xám, lightgrey, darkgrey, aqua, fuschia, vôi, hạt dẻ, hải quân, ô liu, tím, bạc, mòng két


1

Đây là cách tôi chuyển đổi màu Hex thành int và áp dụng cho Nền của Chế độ xem

Giả sử rằng chúng ta có màu # 8080000.

1) Chuyển đổi hex sang int

int myColor = Color.parseColor("#808000");

2) Đặt nền

view.setBackgroundColor(context.getColor(myColor));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.