如何知道它是放大还是缩小flex / air TransformGestureEvent

时间:2011-05-13 17:05:25

标签: android flex air

在Android设备上使用flex / air 2.6,我使用带有TransformGestureEvent的画布来放大地图。听觉效果还可以,但我似乎无法找到用户想要放大或缩小的信息(手指越来越近或分开)。

我预计手势的意图可以通过事件的offsetX和offsetY属性进行识别,就像您将在滑动手势事件中所做的那样。但无论我如何在设备中做手势,我总是得到两个属性为0。

如何在手势缩放事件中知道手指是否靠近或分开?

由于

玛利亚

1 个答案:

答案 0 :(得分:0)

首先,为什么要将Canvas用于移动应用?它已被弃用,你应该使用像Group这样的东西。

其次,你应该look at the API。有一个非常好的例子显示你想要做的事情。

package
{
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.events.TransformGestureEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;

    [SWF(width=320, height=460, frameRate=24, backgroundColor=0x000000)]
    public class TransformGestureExample2 extends Sprite
    {
        [Embed(source="african_elephant.jpg")]
        public var ElephantImage:Class;
        public var scaleDebug:TextField;
        public var rotateDebug:TextField;

        public function TransformGestureExample2()
        {
            // Debug
            var tf:TextFormat = new TextFormat();
            tf.color = 0xffffff;
            tf.font = "Helvetica";
            tf.size = 11;
            this.scaleDebug = new TextField();
            this.scaleDebug.width = 310;
            this.scaleDebug.defaultTextFormat = tf;
            this.scaleDebug.x = 2;
            this.scaleDebug.y = 2;
            this.stage.addChild(this.scaleDebug);
            this.rotateDebug = new TextField();
            this.rotateDebug.width = 310;
            this.rotateDebug.defaultTextFormat = tf;
            this.rotateDebug.x = 2;
            this.rotateDebug.y = 15;
            this.stage.addChild(this.rotateDebug);

            var elephantBitmap:Bitmap = new ElephantImage();
            var elephant:Sprite = new Sprite();

            elephant.addChild(elephantBitmap);

            elephant.x = 160;
            elephant.y = 230;

            elephantBitmap.x = (300 - (elephantBitmap.bitmapData.width / 2)) * -1;
            elephantBitmap.y = (400 - (elephantBitmap.bitmapData.height / 2)) *-1;

            this.addChild(elephant);

            Multitouch.inputMode = MultitouchInputMode.GESTURE;
            elephant.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
            elephant.addEventListener(TransformGestureEvent.GESTURE_ROTATE, onRotate);
        }

        private function onZoom(e:TransformGestureEvent):void
        {
            this.scaleDebug.text = (e.scaleX + ", " + e.scaleY);
            var elephant:Sprite = e.target as Sprite;
            elephant.scaleX *= e.scaleX;
            elephant.scaleY *= e.scaleY;
        }

        private function onRotate(e:TransformGestureEvent):void
        {
            var elephant:Sprite = e.target as Sprite;
            this.rotateDebug.text = String(e.rotation);
            elephant.rotation += e.rotation;
        }
    }
}