大家好
這次在練習使用drawable的layer-list
碰到一些問題,上來求助大家
我用xml寫了一個 箭頭的圖案(arrow_shape.xml)
並且想用程式碼動態更改顏色
但是因為一個Drawable檔案載入至記憶體之後
為了方便重複使用以及節省資源
所以在記憶體內的Drawable物件有一個static的變數
去儲存它的顏色值
而我會在螢幕上呈現出很多個箭頭
箭頭的顏色是隨機選擇的,而箭頭旁邊會有文字告知正確顏色是什麼
碰到問題是箭頭的顏色不一定會正確
思考之後發現應該是CPU平行處理的關係
一般來說正常的處理方式是這樣
更改顏色→顯示在螢幕上
但假設我今天要呈現一個紅色箭頭(A)跟一個黃色箭頭(B)
cpu可能這樣跑
A箭頭改成紅色→B箭頭改成黃色→顯示A在螢幕上→顯示B在螢幕上
結果因為static的顏色值的關係,導致A B都是黃色
請問應該怎麼解決才好呢!???
我有查到可以使用mutate()這個method去處理
但是自己嘗試使用的結果會導致全部顏色都是第一次隨機決定的顏色
請問有人有解法嗎...
謝謝各位
以下附上箭頭檔案以及更改顏色的原始碼
arrow_shape.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/arrow">
<shape android:shape="rectangle">
<size
android:width="55dp"
android:height="59dp" />
<solid android:color="#5EB888" />
<corners android:radius="0dp"/>
</shape>
</item>
<item
android:top="55dp"
android:bottom="-30dp"
android:left="-22dp">
<!