简体   繁体   English

Flex 4.5 mobile Resize textarea with animation 在软键盘激活事件上?

[英]Flex 4.5 mobile Resize textarea with animation on soft keyboard activate event?

I'm using Flex 4.5.1 with AIR 2.7 (and Flash Builder 4.5.1) to build an app for the Blackberry Playbook.我正在使用 Flex 4.5.1 和 AIR 2.7(和 Flash Builder 4.5.1)为 Blackberry Playbook 构建应用程序。

The app has a large textarea that needs to be resized when the soft keyboard shows up.该应用程序有一个大的文本区域,当软键盘出现时需要调整其大小。 I am able to hook into the soft keyboard events and do things there.我能够挂钩软键盘事件并在那里做事。

Now, I want to resize the textarea to fit the remaining part of the screen when the keyboard shows up.现在,我想在键盘出现时调整 textarea 的大小以适应屏幕的剩余部分。 I know the current and destination size and want to use a smooth animation to show the textarea resizing.我知道当前和目标大小,并希望使用平滑的 animation 来显示 textarea 的大小调整。 (I can't already set the height and can see the textarea being correctly resized in the keyboard_activating event - but I want to do it through an animation). (我还不能设置高度,并且可以看到 textarea 在keyboard_activating 事件中正确调整大小 - 但我想通过动画来完成)。 I've tried using the Animate class, the spark.effects.Move class and none of them seem to work in this case.我试过使用 Animate class、spark.effects.Move class,但在这种情况下它们似乎都不起作用。 They seem to run the animation but the screen does not get refreshed!他们似乎在运行 animation 但屏幕没有刷新!

I don't want to use the built-in resizeAppForKeyboard property on the ViewNavigatorApplication.我不想在 ViewNavigatorApplication 上使用内置的 resizeAppForKeyboard 属性。 I have set to 'none' in the app descriptor so that part of it is fine.我在应用程序描述符中设置为“无”,所以它的一部分很好。

Any ideas / thoughts?有什么想法/想法吗? Is my approach correct at all?我的方法完全正确吗? How would one go about resizing the textarea using an animation in the keyboard activating event? go 如何在键盘激活事件中使用 animation 调整文本区域的大小? My code looks like:我的代码如下所示:

In the main view (onCreationComplete event): (txNote is the textarea in question)在主视图中(onCreationComplete 事件):(txNote 是有问题的文本区域)

txNote.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, function(e:SoftKeyboardEvent):void {
    toggleEditMode(true);
});

txNote.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, function(e:SoftKeyboardEvent):void {
    toggleEditMode(false);
});

private function toggleEditMode(keyboardActivated:Boolean):void {
    trace("toggle edit: " + editMode + ", kb activating: " + keyboardActivated + ", txNote height = " + txNote.height);

    editMode = keyboardActivated;

    //we handle resize manually, because we want a nice animation happening and we want to resize only the text area - nothing else.
    var y:Number = editMode ? -38 : 0;
    var height:Number = editMode ? 218 : 455;
    txNote.moveAndSize(y, height);
}

The code in txNote.moveAndSize: txNote.moveAndSize 中的代码:

public function moveAndSize(newY:Number, newHeight:Number):void {

//parent group uses BasicLayout
//(this.parent as Group).autoLayout = false;
//resizePath.valueFrom = this.height;
//resizePath.valueTo = newHeight;

//movePath.valueFrom = this.y;
//movePath.valueTo = newY;

//resizeEffect.heightFrom = this.height;
//resizeEffect.heightTo = height;

    this.top = newY;
    moveEffect.xFrom = this.x;
    moveEffect.xTo = this.x;

    moveEffect.yFrom = this.y;
    moveEffect.yTo = newY;

    moveEffect.end();
    moveEffect.play([ this ]);

    //this.move(x, newY);
    //animate.play([ this ]);

    //this.height = height;
    //this.y = y;

    //setLayoutBoundsSize(width, height);
    //setLayoutBoundsPosition(x, y);
}

The moveEffect / movePath / animate various things I tried are set up in the txNote constructor as follows:我试过的moveEffect/movePath/animate各种东西在txNote构造函数中设置如下:

public class NotesArea extends TextArea {
//      private var animate:Animate;
//      private var movePath:SimpleMotionPath;
//      private var resizePath:SimpleMotionPath;

        private var moveEffect:Move;
//      private var resizeEffect:Resize;

        public function NotesArea() {
            super();

//          animate = new Animate();
//          var paths:Vector.<MotionPath> = new Vector.<MotionPath>();
//          movePath = new SimpleMotionPath("top");
//          resizePath = new SimpleMotionPath("height");
//          paths.push(movePath);
            //paths.push(resizePath);

//          animate.duration = 300;
//          animate.motionPaths = paths;

//          animate.addEventListener(EffectEvent.EFFECT_UPDATE, function(e:EffectEvent):void {
//              trace("y = " + y);
//              invalidateDisplayList();
//          });
//          animate.addEventListener(EffectEvent.EFFECT_END, function(e:EffectEvent):void {
//              trace("EFFECT ended: y = " + y);
//          });

            moveEffect = new Move();
            moveEffect.duration = 250;
            moveEffect.repeatCount = 1;
            moveEffect.addEventListener(EffectEvent.EFFECT_END, function (e:EffectEvent):void {
                //(this.parent as Group).autoLayout = true;
                trace("move effect ran. y = " + y + ", top = " + top);
            });

            //this.setStyle("moveEffect", moveEffect);
//
//          resizeEffect = new Resize();
//          resizeEffect.duration = 250;
//          this.setStyle("resizeEffect", resizeEffect);
        }

}
yourTextField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, onActivating);
yourTextField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATING, onActivating); 
yourTextField.addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, onActivating); 

// in the event listener to the textField IE : 

private function onActivating(event:SoftKeyboardEvent):void 
{
  //listen to the event; make your move here.
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM