繁体   English   中英

在Android上使用drawable加载形状

[英]Loading a shape using drawable on Android

我正在尝试以编程方式使用drawable加载形状,以使背景色更时尚。

基本上,使用XML文件加载形状很简单:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
    android:startColor="#ffffff"
    android:centerColor="#00ffff"
    android:endColor="#000000"
    android:type="linear"
    android:angle="90"/>

但是,由于必须季节性更改,因此我尝试从服务器下载此XML文件 (例如,春天是粉色,夏天是蓝色,秋天是橙色)

下载位于/data/data/package/resources/shape.xml中的XML文件后,我尝试使用GradientDrawable加载此背景色集,因为它全部与渐变有关。

关于创建新渐变的方法有很多指南,但没有关于应用预加载渐变的指导。

我尝试了这个:

 view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));

在这里,视图是活动文件,例如RelativeLayout或其他任何文件

但是,结果是默认的背景颜色为蓝色。

现在,将可绘制对象更改为:

view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));

我将drawable选项更改为ShapeDrawable,因为XML包含Shape

结果是一样的,什么都没有改变。 更改为普通可绘制对象并不能帮助解决问题。

还有另一种方法可以将XML文件从外部存储应用到可绘制对象吗? 否则,我写的是适用的方法,但是有一些错误?

只需使用findViewById获取布局的视图并设置其背景即可。 确保将xml存储在drawable文件夹中。

对于约束布局

ConstraintLayout constraintLayout=findViewById(R.id.clay);
constraintLayout.setBackground(getDrawable(R.drawable.prac_shape));

prac_shape是shape元素的ID。

编辑:通过Java动态构建渐变:

GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]  {getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimaryDark)});
gradient.setShape(GradientDrawable.RECTANGLE);
constraintLayout.setBackground(gradient);

您可以与此一起玩耍,并根据需要进行设置。 您只需要解析您的请求,并将适当的参数传递给构造函数和方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM