0

私の Android マップ アプリケーションには、いくつかのクラスター アイコンがあります。クラスター アイコンが押されるたびに、テキストとボタンを含むポップアップ インフォボックスを表示したいと考えています。ボタンを押すと、次のアクティビティにつながります。

private void drawInfoWindow(Canvas canvas, MapView mapView, boolean shadow,
            int x, int y) {

        if (isSelected_) {

                Point selDestinationOffset = new Point();
                mapView.getProjection().toPixels(cluster_.center_,
                        selDestinationOffset);

                // Setup the info window with the right size & location
                int INFO_WINDOW_WIDTH = 125;
                int INFO_WINDOW_HEIGHT = 25;
                RectF infoWindowRect = new RectF(0, 0, INFO_WINDOW_WIDTH,
                        INFO_WINDOW_HEIGHT);


                infoWindowRect.offset(x, y);

                // Draw inner info window
                canvas.drawRoundRect(infoWindowRect, 5, 5, getInnerPaint());



                // Draw the MapLocation's name
                int TEXT_OFFSET_X = 10;
                int TEXT_OFFSET_Y = 15;

                canvas.drawText(cluster_.number+" Incidents", x + TEXT_OFFSET_X, y
                        + TEXT_OFFSET_Y, getTextPaint());
            }
        }

これは、ポップアップ ウィンドウのような小さなテキスト ビューのみを表示します。しかし、テキストとボタンでポップアップインフォボックスを表示したいです。最善の方法を教えてください....

ありがとう...

4

1 に答える 1

1

キャンバスを使用する代わりに、カスタム レイアウト xml ファイルを使用して mapview にオーバーレイを作成できます。

  1. オーバーレイ用の xml ファイルを作成します (ここでは overlay_pin_layout.xml を使用します)。たとえば、上部にテキスト ビューがあり、下部にボタンがある線形レイアウトです。

  2. このオーバーレイを必要な場所に追加します。

    // xml ファイルからオーバーレイをインフレートします

    overlayPin = getLayoutInflater().inflate(R.layout.overlay_pin_layout, null); を表示します。

    // テキストビューを設定

    ((TextView)(overlayPin.findViewById(R.id.textview_overlayerpin))).setText(YOUR_TEXT);

    // ボタンタッチリスナーを設定

    ((ボタン)(overlayPin.findViewById(R.id.button_overlayerpin))).setOnLongClickListener( new View.OnLongClickListener() {

                        @Override
                        public boolean onLongClick(View v) {
                            // Do something on button click
                            return false;
                        }
                    }
                );
    

    // ジオポイントでマップビューにオーバーレイを追加します

    overlayPin.setLayoutParams(new MapView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, new GeoPoint(YOUR_LAT, YOUR_LON), MapView.LayoutParams.BOTTOM_CENTER)); mapView.addView(overlayPin);

アニメーションのようなポップアップの場合は、これを試してください。アニメーション フォルダーがない場合は、res に作成します。以下のコードを使用して、anim フォルダーに xml を作成します。私はそれを animation_pop_up.xml と呼んでいます。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
    android:fromXScale="0.0"
    android:toXScale="1.0"
    android:fromYScale="0.0"
    android:toYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="500"
    android:repeatCount="0"
    android:repeatMode="reverse"
    android:interpolator="@android:anim/accelerate_interpolator"
    >
</scale>
<alpha
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="500"
    android:repeatCount="0"
    android:repeatMode="reverse">
</alpha>
</set>

mapview に overlayPin を追加すると、アニメーションが再生されます。

Animation animation = AnimationUtils.loadAnimation(mainActivity.getApplicationContext(),
                    R.anim.animation_pop_up);
overlayPin.startAnimation(animation);
于 2012-07-30T06:56:31.297 に答える