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

Android Flex GestureZoom无法在特定区域正常工作,android,actionscript-3,apache-flex,flex4.5,Android,Actionscript 3,Apache Flex,Flex4.5,我尝试了android手机的放大和缩小功能,使用 transformGestureEvent.signature\u缩放但不能正确缩放,因为它始终是缩放中心点,仅在内容(特定区域)内的两个手指之间不精确 我尝试了以下3个放大和缩小功能示例 1. private function onZoom(e:TransformGestureEvent):void/* not working properly */ { swfLoader.scale

我尝试了android手机的放大和缩小功能,使用 transformGestureEvent.signature\u缩放但不能正确缩放,因为它始终是缩放中心点,仅在内容(特定区域)内的两个手指之间不精确

我尝试了以下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>
1。私有函数onZoom(e:TransformGestureEvent):void/*工作不正常*/
{
swfLoader.scaleX*=e.scaleX;
swfLoader.scaleY*=e.scaleY;
}
2.私有函数onZoom(e:TransformGestureEvent):void/*工作不正常*/
{
swfLoader.scaleX*=(e.scaleX+e.scaleY)/2;
swfLoader.scaleY*=(e.scaleX+e.scaleY)/2;
}3.私有函数onZoom(e:TransformGestureEvent):void
{
//缩放视图
swfLoader.scaleX*=e.scaleX;
swfLoader.scaleY*=e.scaleY;
var bounds2:Rectangle=swfLoader.content.getBounds(swfLoader.stage);
变量dx:Number=bounds2.x-bounds1.x;
变量dy:Number=bounds2.y-bounds1.y;
var dw:Number=bounds2.width-bounds1.width;
var dh:Number=bounds2.height-bounds1.height;
//移动视图以使其在缩放时居中
swfLoader.x-=dx+dw/2;
swfLoader.y-=dy+dh/2;
}

那么我的代码中有什么错误呢。如何在两个手指之间缩放精确内容(特定区域)。如果有人知道,请告诉我。

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

虽然你不能从非中心点缩放对象而不移动它,所以只有通过缩放手势,你甚至可以移动“静止”的对象。为了使手势看起来自然,首先你需要移动你的精灵的位置之间的差异,然后从特定的点缩放它

您需要
oldLocalX
oldLocalY
来保持旧坐标。当
手势.phase==GesturePhase.BEGIN
时,将这些变量设置为当前localX/localY。之后,移动你的精灵到新的三角洲

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

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;

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

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

仍然不能正常工作。当手势阶段结束时,我尝试保持localx和oldlocaly。当手势开始时,将这些变量设置为当前的localx/y,但如果有任何想法。。。如果(event.phase==GesturePhase.END){trace('END'+oldlocalY);oldlocalX=event.localX;oldlocalY=event.localY;}