【问题标题】:programmatically create layer-list以编程方式创建图层列表
【发布时间】:2016-11-03 17:37:11
【问题描述】:

我正在尝试以编程方式创建一个层列表,其中包含调整大小的位图作为项目。据我所见,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);

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

【问题讨论】:

    标签: java android android-bitmap


    【解决方案1】:

    您提到您想从几个位图制作一个图层列表。您所拥有的基本上是正确的,您需要做的就是获取每个位图对象并将其转换为BitmapDrawable。为此,您可以使用:

    BitmapDrawable layer1 = new BitmapDrawable(context.getResources(), bitmap1);
    

    如果您在执行此操作时正在进行活动,您甚至不需要致电 context.getResources(),只需 getResources()

    然后您将获取所有图层并创建您的 LayerDrawable,就像您已经完成的一样:

    Drawable[] layers = {layer1, layer2, layer3};
    LayerDrawable splash_test = new LayerDrawable(layers);
    

    (注意layer3在layer2之上,layer2在layer1之上)。

    拥有 LayerDrawable 后,您可以使用view.setBackgoundDrawable(drawable)(API 16 及更高版本)或view.setBackground(drawable)(API 16 之前)将其设置在视图的背景上。 This post 展示了如何检查设备版本并在您支持 16 之前的设备时调用相应的方法。

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

    【讨论】:

    • 非常感谢您写得详细的详细解释,上面的 bitmap1 指的是什么或我将如何创建该对象
    • 没问题! bitmap1 应该是您要调整大小并放入图层列表的位图之一。我从你的问题中假设你已经有了位图。如果不是这种情况,您能否在您想要执行此操作的位置添加代码并说明您计划从何处获取位图?
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多