从SVG设置自定义按钮选择器位图项

时间:2012-10-17 14:39:17

标签: android button svg bitmap

我有一个标准按钮的自定义:

<?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。

1 个答案:

答案 0 :(得分:1)

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

imageView.onDraw(mBitmapCanvas);

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

如果您在询问如何编辑布局列表,请尝试以下方法:

<强>层-list.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()]);