代号一-弹出式表单转换

时间:2019-04-01 10:53:01

标签: forms codenameone transition

根据有关过渡的材料指南,我想在应用程序屏幕上建立某种外观,以传达这些过渡的层次结构。意思是,从左到右过渡的所有事物都处于相同的水平或重要性。较小的表格或简短的用户输入将作为简单的弹出窗口(而不是水平而是垂直)跳入和跳出。

预期行为:

  1. 幻灯片形式使用默认过渡。 Show()将源向左滑动,而目标从右向滑动。 showback()将使源从左侧滑入,而目标将向右滑出。
  2. 弹出窗口形式使用自定义过渡:show()将使源保留在原处(而不以任何其他方式滑动或过渡),而目标(弹出窗口)将从下方滑动。 Showback()将使源(弹出窗口)向底部滑出,在下面显示目标(主窗口)。

实际行为

  1. 幻灯片形式在我的情况下正常工作。

  2. show()使弹出表单从底部滑入屏幕,而源表单则保留在原位,被遮盖了(如预期的那样)。 但是 showback()导致主窗口从顶部滑入,覆盖了弹出屏幕。

完整代码示例以显示实际行为

public markFormGroupTouched(formGroup: FormGroup) {
    Object.values(formGroup.controls).forEach(control => {
        control.markAsTouched();

        if (control instanceof FormGroup) {
            // if its a FormGroup then just call the method recursively
            this.markFormGroupTouched(control)
        }
    });
}

}

具有不同的CommonTransition类型,即in过渡与out过渡,过渡方向参数,最重要的是show()vs showback()的方向令人困惑。

  1. 我如何才能实现弹出表单正确滑出的预期行为?

  2. 是否有更好的方法或更少的代码来实现这一目标?

谢谢。

1 个答案:

答案 0 :(得分:1)

封面具有输入/输出效果,而幻灯片仅具有输出效果。当您从表格A滑到表格B时,会有一个动作包括两个表格的工作原理完全相反。但是,有了盖子,它就可以在A型表的顶部滑动,而后者保持在原位,然后从A型表滑下,看起来好像A型表一直在它的下面。

这意味着过渡和过渡都用于传达两种覆盖模式。但是,这可能会与形式A之外的过渡冲突,因此我们需要暂时将其禁用。

例如:

removeTransitionsTemporarily(backTo);
f.setTransitionInAnimator(CommonTransitions.createCover(CommonTransitions.SLIDE_VERTICAL, false, 300));
f.setTransitionOutAnimator(CommonTransitions.createUncover(CommonTransitions.SLIDE_VERTICAL, true, 300));        


public static void removeTransitionsTemporarily(final Form f) {
    final Transition originalOut = f.getTransitionOutAnimator();
    final Transition originalIn = f.getTransitionInAnimator();
    f.setTransitionOutAnimator(CommonTransitions.createEmpty());
    f.setTransitionInAnimator(CommonTransitions.createEmpty());
    f.addShowListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            f.setTransitionOutAnimator(originalOut);
            f.setTransitionInAnimator(originalIn);
            f.removeShowListener(this);
        }
    });
}