Flex GestureZoom特定区域无法正常工作

时间:2012-02-22 13:10:18

标签: android actionscript-3 flex flex4.5

我尝试使用扩展功能为Android手机放大和缩小功能 transformGestureEvent.GESTURE_ZOOM但它没有正确缩放,因为它总是只在内容(特定区域)内的两个手指之间缩放中心点。

我尝试了以下3个函数示例进行放大和缩小

        1.  private function onZoom(e:TransformGestureEvent):void/* not working properly  */
        {
            swfLoader.scaleX *= e.scaleX;
            swfLoader.scaleY *= e.scaleY;
        }
        2. private function onZoom(e:TransformGestureEvent):void/* not working properly  */
        {
            swfLoader.scaleX *= (e.scaleX+e.scaleY)/2;
            swfLoader.scaleY *= (e.scaleX+e.scaleY)/2;
        }3. private function onZoom(e:TransformGestureEvent):void
        {
            // scale the view
            swfLoader.scaleX *= e.scaleX;
            swfLoader.scaleY *= e.scaleY;

            var bounds2:Rectangle = swfLoader.content.getBounds(swfLoader.stage);
            var dx:Number = bounds2.x - bounds1.x;
            var dy:Number = bounds2.y - bounds1.y;
            var dw:Number = bounds2.width - bounds1.width;
            var dh:Number = bounds2.height - bounds1.height;

            // move the view to keep it centered while zooming
            swfLoader.x -= dx + dw/2;
            swfLoader.y -= dy + dh/2; 

        }<s:BorderContainer id="contentPanel" width="100%" height="100%" backgroundColor="#cccccc" >
    <s:Scroller id="scroller" width="100%" height="100%"   >
                <s:VGroup id="swfloadergroup" width="100%" height="100%"  horizontalAlign="center" verticalAlign="middle"  >

                <s:SWFLoader id="swfLoader" smoothBitmapContent="true"  autoLoad="true" doubleClickEnabled="true"
                             maintainAspectRatio="true" gestureZoom="onZoom(event)" scaleContent="true" loadForCompatibility="true"  />

                <s:SWFLoader id="preLLoader" autoLoad="true"  width="30%" height="30%"
                             source="@Embed('assets/loading.swf')"
                             maintainAspectRatio="true" scaleContent="true "/>
                </s:VGroup> 

    </s:Scroller>
</s:BorderContainer>

所以我的代码出了什么问题。如何缩放两个手指之间的确切内容(特定区域)。如果有人知道那么请告诉我。

2 个答案:

答案 0 :(得分:1)

TransformGestureEvent具有localXlocalY属性,其中包含两个手指之间中心的坐标。

虽然你不能在不移动物体的情况下从非中心点放大物体,所以只能通过缩放手势来移动甚至是“静止”的物体。要使手势看起来自然,您需要通过位置之间的差异移动精灵,然后从特定点缩放它。

您需要oldLocalXoldLocalY来保留旧坐标。在gesture.phase == GesturePhase.BEGIN时将这些变量设置为当前的localX / localY。之后用新的delta移动你的精灵。

要从特定点缩放对象,请执行以下操作:

var matrix:Matrix = this.transform.matrix;
matrix.translate(-event.localX, -event.localY);
matrix.scale(event.scaleX, event.scaleY);
matrix.translate(event.localX, event.localY);
this.transform.matrix = matrix;

答案 1 :(得分:0)

我明白了。当我尝试缩放特定区域时,我使用下面的代码。它工作但不滚动。

 Mtransform = swfLoader.content.transform.matrix; 
            Mtransform.translate( -originX, -originY );
            Mtransform.scale( scale, scale );
            Mtransform.translate( originX, originY );
            swfLoader.content.transform.matrix = Mtransform;