AndroidDev 板


LINE

大家好 这次在练习使用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"> <!--左边的三角形--> <rotate android:fromDegrees="42"> <shape android:shape="rectangle"> <solid android:color="#ffffff" /> </shape> </rotate> </item> <item android:top="55dp" android:bottom="-30dp" android:right="-22dp"> <!--右边的三角形--> <rotate android:fromDegrees="-42"> <shape android:shape="rectangle"> <solid android:color="#ffffff" /> </shape> </rotate> </item> </layer-list> 动态换颜色的程式码 LayerDrawable d = (LayerDrawable) ContextCompat.getDrawable(getContext(), R.drawable.arrow_shape); GradientDrawable shape = (GradientDrawable)d.findDrawableByLayerId(R.id.arrow); shape.setColor(getResources().getColor(colorRef)); this.setBackgroundResource(backgroundImage); 在这边我的this是relativelayout 谢谢各位~~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.121.196.88
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1460626532.A.220.html
1F:→ ssccg: 我不懂明明是不同的Drawable(不同颜色)为什麽硬要用同一个 04/18 17:20
2F:→ ssccg: 就算你弄到可以设颜色>系统draw>换颜色>系统draw,第一次没 04/18 17:25
3F:→ ssccg: 问题,那後面你能控制什麽时候view会重画吗? 每次重画前都 04/18 17:26
4F:→ ssccg: 依现在是要给哪个view用再去改颜色? 04/18 17:26
5F:→ ssccg: Drawable不是只有设给view用完後就能随便改,是有状态的 04/18 17:33
6F:→ ssccg: 应该每个颜色的都要从 getDrawable > mutate > 设颜色 04/18 17:35
7F:→ ssccg: 不要共用不同颜色的 04/18 17:35
8F:→ ericdoctor: 谢谢S大 我本来的想法是模组化 想说同一张图 可以使 04/19 00:51
9F:→ ericdoctor: 用程式去更改颜色就好 我懂他的状态的意思了 谢谢 04/19 00:52







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP