การทำความเข้าใจสีบน Android (หกตัวอักษร)


212

ฉันพยายามทำความเข้าใจว่าสีทำงานอย่างไรใน Android ฉันมีชุดสีนี้เป็นพื้นหลังของฉันLinearLayoutและฉันได้รับพื้นหลังสีเทาด้วยความโปร่งใส:

<gradient android:startColor="#b4555555" android:endColor="#b4555555"
 android:angle="270.0" />

ถ้าฉันลบตัวละครสองตัวสุดท้าย (55) ฉันได้สีทึบเสียความโปร่งใส ฉันพยายามค้นหาหน้าเว็บที่ฉันสามารถดูคำอธิบายบางอย่างเกี่ยวกับเรื่องนี้ แต่ฉันไม่พบมัน

คำตอบ:


170

หากคุณระบุเลขฐานสิบหก 6 หลักนั่นหมายถึง RGB (2 หลักฐานสิบหกสำหรับแต่ละค่าของสีแดงสีเขียวและสีน้ำเงิน

หากคุณระบุเลขฐานสิบหก 8 หลักนั่นคือ ARGB (ตัวเลขฐานสิบหก 2 หลักสำหรับแต่ละค่าของอัลฟาแดงเขียวและน้ำเงินตามลำดับ)

ดังนั้นเมื่อลบ 55 สุดท้ายคุณจะเปลี่ยนจาก A = B4, R = 55, G = 55, B = 55 (สีเทาโปร่งใสส่วนใหญ่) เป็น R = B4, G = 55, B = 55 โปร่งใสสีชมพูมืดมนสีชมพู)

ดูเอกสาร "สี"สำหรับรูปแบบที่รองรับ


และวิธีการตั้งค่า textView โปร่งใสผ่านรหัส? ฉันต้องการแปลงค่า ARGB เป็น int ดังนั้นฉันสามารถใช้งานได้ในภายหลังใน textView.setBackgroundColor (int color) เป็นไปได้ไหม? มีวิธีอื่นในการบรรลุหรือไม่
Marek

@Marek: ค่า ARGB เป็น int ได้อย่างมีประสิทธิภาพ ดูเอกสารได้ที่developer.android.com/reference/android/graphics/Color.html (ค้นหา<<ในหน้า)
Jon Skeet

แต่ไม่ได้จัดรูปแบบเป็น #AARRGGBB มันถูกจัดรูปแบบเป็น 0xAARRGGBB นั่นเป็นเหตุผลที่ฉันไม่สามารถใช้งานได้ในเมธอด setBackgroundColor ฉันสามารถใช้ Color.parseColor ("# AARRGGBB)
Marek

@Marek: มันไม่ใช่ "ฟอร์แมต" - เป็นเพียงจำนวนเต็ม คุณสามารถรวมบิตต่าง ๆ ตามที่ระบุไว้ในเอกสารประกอบ
Jon Skeet

1
@ เครื่องปิ้งขนมปัง: ไม่โปร่งใส
Jon Skeet

1184

Android ใช้ค่า ARGB เลขฐานสิบหกซึ่งจัดรูปแบบเป็น #AARRGGBB ตัวอักษรคู่แรกนั้นคือ AA แสดงถึงช่องอัลฟา คุณต้องแปลงค่าความทึบทศนิยมของคุณให้เป็นค่าเลขฐานสิบหก นี่คือขั้นตอน:

กระบวนการค่าอัลฟ่า Hex

  1. ใช้ความทึบของคุณเป็นค่าทศนิยมและคูณด้วย 255 ดังนั้นถ้าคุณมีบล็อกที่ทึบ 50% ค่าทศนิยมจะเป็น. 5 ตัวอย่างเช่น: .5 x 255 = 127.5
  2. เศษส่วนจะไม่แปลงเป็นเลขฐานสิบหกดังนั้นคุณต้องปัดเศษตัวเลขขึ้นหรือลงเป็นจำนวนเต็ม ตัวอย่างเช่น: 127.5 รอบสูงสุด 128 55.25 รอบลดลงเหลือ 55
  3. ป้อนค่าทศนิยมของคุณในตัวแปลงทศนิยมเป็นฐานสิบหกเช่นhttp://www.binaryhexconverter.com/decimal-to-hex-converterและเปลี่ยนค่าของคุณ
  4. หากคุณได้รับเพียงค่าเดียวให้นำหน้าด้วยค่าศูนย์ ตัวอย่างเช่นหากคุณพยายามรับความทึบ 5% และคุณจะผ่านกระบวนการนี้คุณจะพบกับค่าเลขฐานสิบหกของ D เพิ่มศูนย์หน้ามันเพื่อให้ปรากฏเป็น 0D

นั่นคือวิธีที่คุณพบค่าช่องอัลฟา ฉันใช้เสรีภาพในการรวบรวมรายการของค่าสำหรับคุณ สนุก!

ค่าความทึบแสง Hex

  • 100% - FF
  • 95% - F2
  • 90% - E6
  • 85% - D9
  • 80% - CC
  • 75% - BF
  • 70% - B3
  • 65% - A6
  • 60% - 99
  • 55% - 8C
  • 50% - 80
  • 45% - 73
  • 40% - 66
  • 35% - 59
  • 30% - 4D
  • 25% - 40
  • 20% - 33
  • 15% - 26
  • 10% - 1A
  • 5% - 0D
  • 0% - 00

37
ฐานบนคู่มือการออกแบบสีของวัสดุ Android: google.com/design/spec/style/… คีย์ค่าความทึบ Hex ที่สำคัญเพิ่มเติม: 100%: FF 87%: DE 70%: B3 54%: 8A 30%: 4D 26%: 42 12 %: 1F
cn123h

ที่นี่คุณจะพบค่าทั้งหมด: dtp-aus.com/hexadeci.htmและคุณสามารถรับอัลฟา 0-100 โดยหารตัวเลขด้วย 255 และคูณด้วย 100 ด้วยหวังว่ามันจะช่วยคุณได้
Niib Fouda

สำหรับ 12% echo "obase=16; ibase=10; (255*12+50)/100" | bcอัลฟา: (+50 - สำหรับการปัดเศษเป็นค่าที่ใกล้เคียงที่สุดคือ 100/2 จริง ๆ )
vigilancer

195

ออกคำตอบจาก @BlondeFuriousนี่คือโค้ด Java บางส่วนเพื่อรับค่าเลขฐานสิบหกแต่ละค่าจาก 100% ถึง 0% alpha:

for (double i = 1; i >= 0; i -= 0.01) {
    i = Math.round(i * 100) / 100.0d;
    int alpha = (int) Math.round(i * 255);
    String hex = Integer.toHexString(alpha).toUpperCase();
    if (hex.length() == 1)
        hex = "0" + hex;
    int percent = (int) (i * 100);
    System.out.println(String.format("%d%% — %s", percent, hex));
}

เอาท์พุท:

100%  FF
99%  FC
98%  FA
97%  F7
96%  F5
95%  F2
94%  F0
93%  ED
92%  EB
91%  E8
90%  E6
89%  E3
88%  E0
87%  DE
86%  DB
85%  D9
84%  D6
83%  D4
82%  D1
81%  CF
80%  CC
79%  C9
78%  C7
77%  C4
76%  C2
75%  BF
74%  BD
73%  BA
72%  B8
71%  B5
70%  B3
69%  B0
68%  AD
67%  AB
66%  A8
65%  A6
64%  A3
63%  A1
62%  9E
61%  9C
60%  99
59%  96
58%  94
57%  91
56%  8F
55%  8C
54%  8A
53%  87
52%  85
51%  82
50%  80
49%  7D
48%  7A
47%  78
46%  75
45%  73
44%  70
43%  6E
42%  6B
41%  69
40%  66
39%  63
38%  61
37%  5E
36%  5C
35%  59
34%  57
33%  54
32%  52
31%  4F
30%  4D
29%  4A
28%  47
27%  45
26%  42
25%  40
24%  3D
23%  3B
22%  38
21%  36
20%  33
19%  30
18%  2E
17%  2B
16%  29
15%  26
14%  24
13%  21
12%  1F
11%  1C
10%  1A
9%  17
8%  14
7%  12
6%  0F
5%  0D
4%  0A
3%  08
2%  05
1%  03
0%  00

เวอร์ชัน JavaScript อยู่ด้านล่าง:


นอกจากนี้คุณยังสามารถ Google "number to hex" โดยที่ 'number' เป็นค่าใด ๆ ระหว่าง 0 ถึง 255


36

การออกแบบวัสดุ Android

นี่คือการแปลงสำหรับการตั้งค่าระดับความทึบของสีข้อความ

  • 100%: FF
  • 87%: DE
  • 70%: B3
  • 54%: 8A
  • 50%: 80
  • 38%: 61
  • 12%: 1F

ข้อความสีเข้มบนพื้นหลังสีอ่อน

ป้อนคำอธิบายรูปภาพที่นี่

  • ข้อความหลัก: DE000000
  • ข้อความรอง: 8A000000
  • ข้อความที่ปิดใช้งานข้อความคำใบ้และไอคอน: 61000000
  • วงเวียน: 1F000000

ตัวอักษรสีขาวบนพื้นหลังสีเข้ม

ป้อนคำอธิบายรูปภาพที่นี่

  • ข้อความหลัก: FFFFFFFF
  • ข้อความรอง: B3FFFFFF
  • ข้อความที่ปิดใช้งานข้อความคำใบ้และไอคอน: 80FFFFFF
  • วงเวียน: 1FFFFFFF

ดูสิ่งนี้ด้วย

  • เงยหน้าขึ้นมองเปอร์เซ็นต์ใด ๆที่นี่

เยี่ยมมากขอบคุณ! ตั้งแต่วันที่ 7 มกราคม 2019 ค่าเหล่านี้จะไม่ปรากฏในหน้าการออกแบบวัสดุ Android ที่คุณเชื่อมโยงอีกต่อไป เหล่านี้ยังคงเป็นค่าแนะนำอย่างเป็นทางการและมีแหล่งที่มาอย่างเป็นทางการอื่นที่พวกเขาจะระบุไว้? ขอบคุณ!
TheUnwokenFool

@TheUnwokenFool คำตอบนี้อาจล้าสมัยแล้ว ฉันไม่เห็นอะไรเลยเกี่ยวกับการตั้งค่าระดับความทึบของข้อความ หากปรากฏว่ามีข้อขัดแย้งใด ๆ ให้ไปตามแนวทางปฏิบัติปัจจุบัน
Suragch

17

บน Android สามารถระบุสีเป็น RGB หรือ ARGB

http://en.wikipedia.org/wiki/ARGB

ใน RGB คุณมีอักขระสองตัวสำหรับทุกสี (แดงเขียวน้ำเงิน) และใน ARGB คุณมีสองตัวอักษรเพิ่มเติมสำหรับช่องอัลฟา

ดังนั้นถ้าคุณมี 8 ตัวอักษรมันคือ ARGB โดยสองตัวแรกจะระบุช่องอัลฟา หากคุณลบอักขระสองตัวที่นำหน้าออกจะเป็นเพียง RGB (สีทึบไม่มีตัวอักษร / โปร่งใส) หากคุณต้องการระบุสีในซอร์สโค้ด Java ของคุณคุณต้องใช้:

int Color.argb (int alpha, int red, int green, int blue)

alpha  Alpha component [0..255] of the color
red    Red component [0..255] of the color
green  Green component [0..255] of the color
blue   Blue component [0..255] of the color

การอ้างอิง: argb


7

ค่าสีฐานสิบหก 8 หลักคือการแทนค่า ARGB (อัลฟ่า, แดง, เขียว, น้ำเงิน) ในขณะที่ค่า 6 หลักจะถือว่าเป็นความทึบ 100% (ทึบอย่างเต็มที่) และกำหนดเพียงค่า RGB ดังนั้นเพื่อให้สิ่งนี้ทึบแสงอย่างสมบูรณ์คุณสามารถใช้ # FF555555 หรือ # 555555 แต่ละค่าเลขฐานสิบหก 2 หลักคือหนึ่งไบต์ซึ่งแทนค่าตั้งแต่ 0-255


-1

ที่ chrome รุ่นใหม่ (อาจเป็น 67.0.3396.62), CSS hex hex สามารถใช้การแสดงโมเดลนี้

เช่น:

div{
  background-color:#FF00FFcc;
}

ccมีความทึบแต่โครเมี่ยมเก่าไม่รองรับตัวดัดแปลงนั้น


ยินดีต้อนรับสู่ StackOverflow โปรดเยี่ยมชมการท่องเที่ยว การตอบกลับของคุณไม่ได้ช่วย OP ในขณะที่เขาถามเกี่ยวกับสีใน Android ไม่ใช่ Chrome หรือ HTML
PeS

@PeS เมื่อวานใช่ แต่มีตัวแทนเหมือนกัน
Heicks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.