1

我正在尝试创建一个 XML Drawable,我将使用它来代替 OSMDroid 中的默认标记。
这就是它最终的样子:

自定义标记

黑色部分将在创建标记时加载,因为每个标记在那里都有不同的图像。(如果这很重要,这些将从数据库中加载)

我试图创建一个 XML Drawable,它有点工作,但黑色部分似乎被缩放以适合图像,从而使标记只是一个黑色的大方块。(没有黑色部分它工作正常)

我当前的 XML:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:drawable="@drawable/marker"/>         // main

    <item android:drawable="@drawable/markerfill" />    // black part

</layer-list>

我尝试对第二个项目使用秤,但是当我查看秤时,看起来我不能为此使用秤。

我想要什么:
我将黑匣子加载到“主要”部分中,必要时调整它的大小(同时保持比例)并从 Java-Code 更改它。我将把这个标记用于 OSMDroid。

最好的方法是什么?

4

3 回答 3

2

我想要什么:我将黑匣子加载到“主要”部分中,必要时调整它的大小(同时保持比例)并从 Java-Code 更改它。我将把这个标记用于 OSMDroid。

如果第一层图像在使用时不会调整大小/缩放(我不知道 OSMDroid 如何管理该标记),那么您可以使用 a 的当前方法LayerDrawable并将动态图像“放置”为LayerDrawable.setLayerInset()

public Drawable makeBasicMarker(Bitmap bitmap) {
        Drawable[] layers = new Drawable[2];
        layers[0] = new BitmapDrawable(getResources(),
                BitmapFactory.decodeResource(getResources(), R.drawable.marker));
        layers[1] = new BitmapDrawable(getResources(), bitmap);
        LayerDrawable ld = new LayerDrawable(layers);
        ld.setLayerInset(1, xx, xx, xx, xx); // xx would be the values needed so bitmap ends in the upper part of the image
        return ld;
    }

如果图像是按比例缩放的,那么您需要自己制作Drawable并绘制自己适当放置的部分。

于 2013-07-21T16:08:11.773 回答
0

像这样试一试: 1.用第一个可绘制对象定义一个视图;2.用drawBitmap()方法绘制第二个item 3.调用postInvalidate()方法重绘。

于 2013-07-17T08:31:48.627 回答
0

在mBG上绘制mBar,指的是那些:

无效的onDraw(最终画布){

super.onDraw(canvas);

float zoomX = mWidth / (float) mBG.getWidth();
float zoomY = mHeight / (float) mBG.getHeight();

canvas.drawBitmap(mBG, 0, 0, null);

canvas.drawBitmap(mBG, new Rect(0, 0, mBG.getWidth(), mBG.getHeight()),
    new RectF(0, 0, mWidth, mHeight), null);

....
canvas.drawBitmap(mBar, new Rect(0, 0, (int) w, (int) h), new RectF(
    X_LOCATION * zoomX, Y_LOCATION * zoomY, (X_LOCATION + w)
        * zoomX, (Y_LOCATION + h) * zoomY), null);

}
于 2013-07-17T14:59:34.907 回答