在 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 文件,因为它必须随季节变化。 (比如spring是粉色,夏天是蓝色,秋天是橙色)
下载位于 /data/data/package/resources/shape.xml 的 XML 文件后,我尝试使用 GradientDrawable 加载此背景颜色集,因为它完全是关于渐变的。
有很多关于创建新渐变的操作指南,但没有关于应用预加载渐变的指南。
我试过这个:
view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));
此处,视图是 activity 文件,如 RelativeLayout 或其他任何东西
但是,结果是默认背景颜色,即蓝色。
现在我将可绘制对象更改为:
view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));
我将可绘制选项更改为 ShapeDrawable,因为 XML 包含 Shape
结果是一样的,没有任何改变。更改为普通可绘制对象并不能帮助解决问题。
是否有其他方法可以将 XML 文件从外部存储 应用到可绘制对象?不然我写的是申请的方法但是有一些错误?
只需使用 findViewById 获取您的布局视图并设置其背景。
确保将 xml 存储在可绘制文件夹中。
对于约束布局
ConstraintLayout constraintLayout=findViewById(R.id.clay);
constraintLayout.setBackground(getDrawable(R.drawable.prac_shape));
prac_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);
您可以随意设置它。您只需要解析您的请求并将适当的参数传递给构造函数和方法。
我正在尝试以编程方式使用 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 文件,因为它必须随季节变化。 (比如spring是粉色,夏天是蓝色,秋天是橙色)
下载位于 /data/data/package/resources/shape.xml 的 XML 文件后,我尝试使用 GradientDrawable 加载此背景颜色集,因为它完全是关于渐变的。
有很多关于创建新渐变的操作指南,但没有关于应用预加载渐变的指南。
我试过这个:
view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));
此处,视图是 activity 文件,如 RelativeLayout 或其他任何东西
但是,结果是默认背景颜色,即蓝色。
现在我将可绘制对象更改为:
view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));
我将可绘制选项更改为 ShapeDrawable,因为 XML 包含 Shape
结果是一样的,没有任何改变。更改为普通可绘制对象并不能帮助解决问题。
是否有其他方法可以将 XML 文件从外部存储 应用到可绘制对象?不然我写的是申请的方法但是有一些错误?
只需使用 findViewById 获取您的布局视图并设置其背景。 确保将 xml 存储在可绘制文件夹中。
对于约束布局
ConstraintLayout constraintLayout=findViewById(R.id.clay);
constraintLayout.setBackground(getDrawable(R.drawable.prac_shape));
prac_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);
您可以随意设置它。您只需要解析您的请求并将适当的参数传递给构造函数和方法。