Tôi đã tạo gradient với Lineargradient bằng mã này: (Tôi biết nó có thể đơn giản hơn với Color.parseColor
nhưng nó phải là cách này cho những gì tôi định làm. có thể rút ra được.)Lineargradient được vẽ offset từ positon được chỉ định
colors = new int[]{ Color.HSVToColor(new float[]{0, 1, 1}),
Color.HSVToColor(new float[]{60, 1, 1}),
Color.HSVToColor(new float[]{120, 1, 1}),
Color.HSVToColor(new float[]{180, 1, 1}),
Color.HSVToColor(new float[]{240, 1, 1}),
Color.HSVToColor(new float[]{300, 1, 1}),
Color.HSVToColor(new float[]{360, 1, 1}) };
Shader shader = new LinearGradient(0, 0, width, 0, colors, null, Shader.TileMode.CLAMP);
paint.setShader(shader);
Sản xuất kết quả này với màu hơi lệch, diện tích xanh quá nhỏ và diện tích xanh quá lớn so với kết quả mong đợi.
Tôi đã kiểm tra mọi thứ. Tôi đã cố gắng sử dụng new float[]{0f, 1/6f, 2/6f, 3/6f, 4/6f, 5/6f, 1f}
thay vì null
cho đối số vị trí, cùng một kết quả. Điều này có thể là một lỗi quá.
Lưu ý rằng đây không phải là bản sao của this post cũng không phải this one. Đây là về các điểm dừng không chính xác được thiết lập trong mã mà không phải là trường hợp của tôi. Nó có thể liên quan đến this one nhưng tôi không thấy như thế nào.
EDIT: Có lẽ điều này có thể được giải quyết bằng cách đặt các vị trí không bằng nhau cho màu sắc, nhưng làm cách nào tôi có thể tính toán các vị trí chính xác này?
Thành thật mà nói, sự khác biệt duy nhất giữa thực tế và dự kiến có vẻ là một số bù đắp. – natario
Đó là những gì tôi đang cố gắng giải quyết và nó không thể được gây ra bởi bất cứ điều gì trong mã của tôi bên ngoài một trong những tôi đã cung cấp. –
Vâng, tôi hiểu rồi. Nếu bạn sử dụng 0, 1, 1 làm màu cuối cùng, thay vì 360, 1, 1 thì sao? – natario