android–GradientDrawable setColors用于较旧的API级别

android–GradientDrawable setColors用于较旧的API级别,第1张

概述是否可以在比API16(JellyBean)更低的API级别上设置渐变的颜色数组?我目前正在使用:GradientDrawablegd=(GradientDrawable)this.getBackground();int[]colors={0xFFFF0000,0xFFCC0099};gd.setColors(colors);哪个效果很好,但我希望支持APILevel8(Froyo)或10(Gingerb

是否可以在比API 16(JellyBean)更低的API级别上设置渐变的颜色数组?

我目前正在使用:

GradIEntDrawable gd = (GradIEntDrawable)this.getBackground();int[] colors = {0xFFFF0000, 0xFFCC0099};gd.setcolors(colors);@H_502_9@

哪个效果很好,但我希望支持API Level 8(Froyo)或10(Gingerbread v2).

解决方法:

我不认为有这么简单的方法,所以这就是我的建议:根据旧的参数创建一个新的GradientDrawable(对于低于16的API).感谢@StephenNiedzielski指出这里的缺陷 – 在API 16下面没有getorIEntation().

没有Reflection就没有办法做到这一点,因为你需要drawable的方向以便重新创建它.如果您已有方向,则可以执行以下 *** 作:

GradIEntDrawable gd = (GradIEntDrawable) getBackground();int[] colors = {0xFFFF0000, 0xFFCC0099};if (androID.os.Build.VERSION.SDK_INT >= 16) {    gd = gd.mutate(); // For safe resource handling    gd.setcolors(colors);} else {    // Fallback for APIs under 16.    GradIEntDrawable ngd = new GradIEntDrawable(/* OrIEntation variable */, colors);    // You may have to set other qualitIEs of `ngd` here to make it match.    setBackgroundDrawable(ngd);}@H_502_9@

所以,如果没有这些信息,你必须在16以下的API上使用Reflection.虽然它很骇人听闻,但由于这些API的实现不应该改变(因为它们不再被更新),所以它是相当安全的.

如果它适合您的喜好,您可以使用Reflection to access the GradientState inner class.基本上,您需要模拟getorIEntation()方法执行的调用gd.mGradIEntState.mOrIEntation(如注释中所述).由于这两个都是私人的,你必须use Reflection.

总结

以上是内存溢出为你收集整理的android – GradientDrawable setColors用于较旧的API级别全部内容,希望文章能够帮你解决android – GradientDrawable setColors用于较旧的API级别所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1106376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存