我有一个标准按钮的自定义:
<?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。
答案 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()]);