0

私はパネルを動的に生成し、そのように他の状態に配置します。そのため、ある状態では、左側にパネルのリストがあり、右側に1つの大きなパネルがあります。たとえば、ある状態で、左側のリストをクリックすると(小さなパネル)そのパネルが大きなパネルの代わりになり、大きなパネルがその場所に戻ります。左側に50個のパネルがあり、下にスクロールしたいのですが、大きなパネルを下に移動したくないので、修正したいと思います。代替テキスト これは私が得た場所であり、それを行う方法がわかりません。ここに私のコードがあります。

enter code here

保護された関数canvas1_creationCompleteHandler(event:FlexEvent):void {

            blurEffect= new BlurEffect(myBlur,myUnBlur);

            listEventsResult.token=eventService.listEvent();
            blurEffect.initFilter(event);


            panels=generatePanels(panelNumber);
            var vBox:VGroup= new VGroup();


            states=statesList.toArray();

            trace("stavi sequence i sostojba e"+ states[0].toString());

            for(var i:int=0; i<panelNumber ;i++)        // get panel from list panels and set states
            {
                 addChild(panels.getItemAt(i) as Panel);    
                (states[i] as State).overrides=[ new SetProperty(panels.getItemAt(i),"x",110), new SetProperty(panels.getItemAt(i),"y",0),
                    new SetProperty(panels.getItemAt(i),"width",widthBigPanel), new SetProperty(panels.getItemAt(i),"height",heightBigPanel)
                    //,new AddChild(g2,(panels.getItemAt(k) as Panel))
                    //,new SetProperty(panels.getItemAt(i),"scaleZ",110)
                ];
                trace("vlegov override za new state");
                var yy:int=0;


                for(var k:int=0;k<panelNumber;k++)
                {
                    trace("menuvam state: yy = " + yy);
                    if(k!=i){
                        vBox.addChild(panels.getItemAt(k) as Panel);
                        (states[i] as State).overrides = (states[i] as State).overrides.concat([ new SetProperty(panels.getItemAt(k),"x",x), new SetProperty(panels.getItemAt(k),"y",yy),
                            new SetProperty(panels.getItemAt(k),"width",widthPanel), new SetProperty(panels.getItemAt(k),"height",heightPanel)
                        //,new AddChild(g1,(panels.getItemAt(k) as Panel))
                        ]);
                        yy+=110;
                    }
                }

                for(z=0; z<(states[i] as State).overrides.length; ++z){
                    var tempSetProperty:SetProperty= (states[i] as State).overrides[z] as SetProperty;
                    trace("\nname: " + tempSetProperty.name);
                    trace("target: " + tempSetProperty.target);
                    trace("value: " + tempSetProperty._value);
                }


                setCurrentState("state0");
                addChild(vBox);
            }

            //sequence.targets=panels.toArray();
            t1.targets=panels.toArray();

        }
4

1 に答える 1

1

通常のスクロールを行うこともできますが、垂直スクロールバーリスナーscroll = "myScroll(event)を追加して、スクロールが発生したときに大きなパネルを再配置します(パネルの元のx、y値やverticalScrollPositionプロパティなどを使用)。

または、最初のキャンバスの上に2番目のキャンバスを追加し、その背景を透明に設定することもできます。大きなパネルを透明なキャンバスに配置して、スクロールしないようにします(スクロールが完了したら、元のキャンバスに戻します)。

これらは両方とも処理に重くなります(特に透明なキャンバス)。

于 2010-12-03T09:58:24.360 に答える