2013-07-17 41 views
1

我想创建一个XML Drawable,我将使用它代替OSMDroid中的默认标记。
这是它应该是什么样子到底:XML Drawable由两个图像组成

custom marker

的黑色部分将在创建标记,因为每个标记都会有不同的形象出现加载。

我试图创建一个XML绘制对象(这些都会从数据库中,如果that's重要的加载),它还挺作品,但黑色部分好像缩放到适合的图像,从而使标记只是一个黑色的大广场。 (没有黑色部分,它工作正常)

我目前的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的代码更改。 我将使用OSMDroid的这个标记。

什么是最好的方法呢?

回答

2

What I want: I load the black box into the "main" part, resize it if necessary (while keeping the proportions) and change it from Java-Code. I will be using this marker for OSMDroid.

如果第一层的图像将不会被调整大小/缩放使用时(I不知道OSMDroid如何管理该标记),那么你可以使用目前的方法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并自己绘制零件,以便适当放置它们。

+0

谢谢,那正是我想要的 –

0

试试这样:1.用第一个drawable定义一个视图; 2.使用drawBitmap()方法绘制第二个项目3.调用postInvalidate()方法重绘。

+0

你能给我一个例子/链接怎么做2? –

0

绘制毫巴上MBG,参照那些:

空隙的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); 

} 
+0

看起来不错,但我把它放在哪里? (整个onDraw)在绘制地图的类中? (=使用标记的地方) –

+0

把它放在mapviewer类 – hopetribe

+0

我把它放到我的地图显示的Activity中,但是我得到这个错误:“onDraw(Canvas)的方法未定义类型Activity” –