1

我有一个标准按钮的定制:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true">
   <layer-list>
     <item android:drawable="@drawable/standard_button_normal_background_layer1"/>
     <item android:drawable="@drawable/standard_button_normal_background_layer0"/>
     <item><bitmap android:gravity="center" android:src="@drawable/the_bitmap" /></item>
   </layer-list>
 </item>

...

</selector>

我需要用从 SVG 文件加载的位图更改位图。我用

http://code.google.com/p/svg-android/

可以生成 PictureDrawable:

SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.icon);
PictureDrawable pd = svg.createPictureDrawable();
imageView.setImageDrawable(pd);

如何访问特定<bitmap>项目,如何设置位图?有什么解决办法吗?

编辑:

我想知道是否可以以编程方式将<layer-list>项目底部的图片添加到按钮自定义。图片来自svg,所以不在编译资源上。

我需要的结果是一个带有一些自定义图形(由 定义<layer-list>)的按钮和一个来自 svg 的居中图标。

4

1 回答 1

1

如果您要问如何编写一个引用从 SVG 加载的图片的 XML 文件,那有点像鸡和蛋。部署您的应用程序后, res/ 中的所有内容都是只读的。因此,通过从一组绘图指令中动态加载位图,您可以简单地存储输出的位图。

imageView.onDraw(mBitmapCanvas);

这就是你所能做的。您可以创建一个栅格作为预构建步骤,但您将失去与您的应用程序捆绑的矢量的大小优势。

如果您询问如何编辑布局列表,请尝试以下操作:

层列表.xml

<layer-list>
     <item android:drawable="@drawable/standard_button_normal_background_layer1"/>
     <item android:drawable="@drawable/standard_button_normal_background_layer0"/>
     <!-- Remove bitmap -->
</layer-list>

然后当你想使用这个drawable时:

LayerDrawable drawable = (LayerDrawable)getResources().getDrawable(R.drawable.layout_list);
ArrayList<Drawable> layers = new ArrayList<Drawable>();
for(int i=0; i < drawable.getNumberOfLayers(); i++) {
   layers.add(drawable.getDrawable(i);
}

layers.add(new BitmapDrawable(mBitmap));
drawable = new LayerDrawable(layers.toArray(new Drawable[layers.size()]);
于 2012-10-17T14:46:34.220 回答