我尝试使用扩展功能为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>
所以我的代码出了什么问题。如何缩放两个手指之间的确切内容(特定区域)。如果有人知道那么请告诉我。
答案 0 :(得分:1)
TransformGestureEvent具有localX
和localY
属性,其中包含两个手指之间中心的坐标。
虽然你不能在不移动物体的情况下从非中心点放大物体,所以只能通过缩放手势来移动甚至是“静止”的物体。要使手势看起来自然,您需要通过位置之间的差异移动精灵,然后从特定点缩放它。
您需要oldLocalX
和oldLocalY
来保留旧坐标。在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;