我正在尝试创建一个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>
我尝试使用第二项的比例,但当我查看比例时,看起来我不能使用比例尺。
我想要的是什么:
我将黑盒加载到“main”部分,必要时调整其大小(同时保持比例)并从Java-Code更改它。
我将把这个标记用于OSMDroid。
最好的办法是什么?
答案 0 :(得分:2)
我想要的是:我将黑匣子加载到“主”部分,如果是,则调整大小 必要的(保持比例)并改变它 Java的代码。我将把这个标记用于OSMDroid。
如果第一层图像在使用时不会调整大小/缩放(我不知道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
并自行绘制部件以适当放置。
答案 1 :(得分:0)
尝试这样:1。使用第一个drawable定义视图; 2.使用drawBitmap()方法绘制第二个项目3.调用postInvalidate()方法重绘。
答案 2 :(得分:0)
在mBG上绘制mBar,指的是:
void onDraw(最终Canvas画布){
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);
}