[問題] Drawable mutate 使用方式

作者: ericdoctor (小黑)   2016-04-14 17:35:30
大家好
這次在練習使用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">
<!
作者: ssccg (23)   2016-04-18 17:20:00
我不懂明明是不同的Drawable(不同顏色)為什麼硬要用同一個就算你弄到可以設顏色>系統draw>換顏色>系統draw,第一次沒問題,那後面你能控制什麼時候view會重畫嗎? 每次重畫前都依現在是要給哪個view用再去改顏色?Drawable不是只有設給view用完後就能隨便改,是有狀態的應該每個顏色的都要從 getDrawable > mutate > 設顏色不要共用不同顏色的
作者: ericdoctor (小黑)   2016-04-19 00:51:00
謝謝S大 我本來的想法是模組化 想說同一張圖 可以使用程式去更改顏色就好 我懂他的狀態的意思了 謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com