Android Flex GestureZoom无法在特定区域正常工作
我尝试了android手机的放大和缩小功能,使用 transformGestureEvent.signature\u缩放但不能正确缩放,因为它始终是缩放中心点,仅在内容(特定区域)内的两个手指之间不精确 我尝试了以下3个放大和缩小功能示例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
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;}