以编程方式创建图层列表

the*_*box 6 java android android-bitmap

我试图以编程方式创建一个图层列表与调整大小的位图作为项目.从我所看到的BitmapDrawable已被弃用.新构造函数需要以下参数 - public BitmapDrawable(Resources res,Bitmap bitmap).我从下面的一个非常基本的例子开始.

    BitmapDrawable background = new BitmapDrawable();
    background.setBounds(10,10,10,10);
    Drawable[] layers = {background};
    LayerDrawable splash_test = new LayerDrawable(layers);
    splash_test.setLayerInset(0, 0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)

我如何正确使用新的BitmapDrawable构造函数以及如何将可绘制资源链接到背景对象.

小智 14

您提到要从几个位图创建一个图层列表.你拥有的内容在很大程度上是正确的,你需要做的就是获取每个位图对象并将其转换为BitmapDrawable.为此,您可以使用:

BitmapDrawable layer1 = new BitmapDrawable(context.getResources(), bitmap1);
Run Code Online (Sandbox Code Playgroud)

如果你是一个活动,当你这样做,你甚至不需要调用context.getResources(),只需getResources().

然后,您将获取所有图层并创建LayerDrawable,就像您现在一样:

Drawable[] layers = {layer1, layer2, layer3};
LayerDrawable splash_test = new LayerDrawable(layers);
Run Code Online (Sandbox Code Playgroud)

(请注意,layer3将位于layer2之上,而layer2将位于layer1之上).

获得LayerDrawable后,您可以使用view.setBackgoundDrawable(drawable)(在API 16及更高版本上)或view.setBackground(drawable)(在API 16之前)在视图的背景上设置它.本文将介绍如何检查设备版本,并在支持前16设备时调用相应的方法.

如果您想要相对于彼此定位图层,那么您还需要setLayerInset()在代码中使用,但我建议您在获取图层列表后再尝试使用.