0

FlexサイトでGoogleマップを使用して地図を作成しています。マップ上にポリゴンがオーバーレイされています。ユーザーがポリゴンをロールオーバーすると、エリアを識別する情報ウィンドウが開き、エリアの塗りつぶしアルファが0に設定されます。ロールアウトすると、情報ウィンドウが削除され、塗りつぶしアルファがデフォルトの0.2に戻ります。

ポリゴンが表示され、インフォウィンドウが正しく追加および削除されます。問題は、塗りつぶしアルファの変更がリストの最後のポリゴンでのみ発生することです。たとえば、ポリゴンA、B、C、およびDがある場合。Aをロールオーバーすると、Aのアルファが変更されます。しかし、代わりにDのアルファが変化します。どのポリゴンをロールオーバーしても、最後のポリゴンのアルファは変化します。infoWindowsはロールオーバー時に正しく動作するため、これは奇妙なことです。したがって、ポリゴンAをロールオーバーすると、インフォウィンドウAの正しい情報が表示されます。

以下のコードを参照してください。

private function allEncodedPolygons(event:MouseEvent) : void {
                var myPaneManager:IPaneManager = map.getPaneManager();
                var myMapPane:IPane = myPaneManager.createPane();



                if (allHoodsToggle.selected) { 

                    map.clearOverlays();
                    mapType.selectedIndex = -1;

                    for each (var neighbNode:XML in detailMapResultData){
                      outlinePolygon = this.createPoly(neighbNode);
                    map.addOverlay(outlinePolygon)};

                    allHoodsToggle.removeEventListener(MouseEvent.CLICK, allEncodedPolygons);


                }
               else {myPaneManager.clearOverlays(); allHoodsToggle.removeEventListener(MouseEvent.CLICK, allEncodedPolygons); 

                    }       


    }

以下の関数はポリゴンを作成し、ロールオーバー関数を持っています。

private var neighbShapes:Polygon;

    private function createPoly(neighbNode:XML):Polygon {
        var optionsDefault:PolygonOptions = new PolygonOptions( { strokeStyle: {thickness: 5, color: 0xFFFF00, alpha: 0.4, pixelHinting: true}, fillStyle: { alpha: 0.2 }} ); 


        var neighbCenterLat:Number = neighbNode.latitudeCenter.toString(); 
        var neighbCenterLong:Number = neighbNode.longitudeCenter.toString(); 
        var neighbCenter:LatLng = new LatLng(neighbCenterLat,neighbCenterLong);
        var optionsHover:PolygonOptions = new PolygonOptions( { fillStyle: { alpha: 0.0 }} ); 
        var encodedData:EncodedPolylineData = new EncodedPolylineData(neighbNode.encoding.toString(), neighbNode.zoomFactor.toString(), neighbNode.level.toString(), neighbNode.numlevels.toString());
        var encodedList:Array = [encodedData];
        neighbShapes = Polygon.fromEncoded(encodedList, optionsDefault);

        neighbShapes.addEventListener(MapMouseEvent.CLICK, function(event:MapMouseEvent): void {
           map.openInfoWindow(event.latLng, new InfoWindowOptions({content: neighbNode.name.toString(), hasCloseButton:false, hasShadow:true}));
        });

        neighbShapes.addEventListener(MapMouseEvent.ROLL_OVER, function(event:MapMouseEvent): void {
            neighbShapes.setOptions(optionsHover);

            map.openInfoWindow(neighbCenter, new InfoWindowOptions({content: neighbNode.name.toString(), hasCloseButton:false, hasShadow:false})); 
        });

        neighbShapes.addEventListener(MapMouseEvent.ROLL_OUT, function(event:MapMouseEvent): void {
            neighbShapes.setOptions(optionsDefault); 
        });

         return neighbShapes;
    }

インフォウィンドウが正しく表示されているのに、アルファを変更する関数が最後のポリゴンでのみ起動する理由について何か提案はありますか?誰かアイデアがあれば聞いてみたいです。

ありがとう。

-ラクシュミディ

4

1 に答える 1

1

さて、私はそれを理解しました。neighbShapesをターゲットにしてホバーオプションを設定する代わりに、次を使用する必要があります。event.currentTarget.setOptions(optionsHover);

-ラクシュミディ

于 2010-05-12T15:47:45.553 に答える