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);

    // 设置按钮触摸监听器

    ((Button)(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 文件夹。在 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 回答