1

OSMDroid のデフォルト マーカーの代わりに使用する XML Drawable を作成しようとしています。
最終的には次のようになります。

カスタム マーカー

マーカーごとに異なるイメージがあるため、マーカーの作成中に黒い部分が読み込まれます。(重要な場合、これらはデータベースからロードされます)

私は 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>

2番目のアイテムにスケールを使用しようとしましたが、スケールを調べたところ、これにはスケールが使用できないようでした.

私が欲しいもの:
ブラックボックスを「メイン」部分にロードし、必要に応じて(比率を維持しながら)サイズを変更し、Javaコードから変更します。このマーカーを OSMDroid に使用します。

これには何が最善のアプローチでしょうか?

4

3 に答える 3

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のパーツを作成して適切に配置する必要があります。

于 2013-07-21T16:08:11.773 に答える
0

それらを参照して、mBG に mBar を描画します。

void 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 に答える
0

次のように試してみてください: 1.最初のドローアブルでビューを定義します。2. drawBitmap() メソッドで 2 番目のアイテムを描画します。 3. postInvalidate() メソッドを呼び出して再描画します。

于 2013-07-17T08:31:48.627 に答える