[问题] 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