2017-01-17 7 views
1

いつも私が慣れていない機能を使用する前に、com.codename1.ui.Container.replace(Component, Component, Transition)を理解するために少しのフォーム子孫クラスを書きました。アニメーション中にサイズやオフセットが間違っています

私のフォームで遊んでいるときに明白なことの1つは、アニメーション中に、アニメーション化されていないときとは異なり、コンポーネントのサイズやオフセットが異なっていることです。私はそれが意図されていないと確信しています、それは?

私が発見したもう1つのことは、enabledプロパティがfalseに設定されていても、ツールバーに追加したコマンドインスタンスが実行可能なままであることです。ここで期待されるべきことは何ですか?

コードを参照してください:

public class FormReplaceComponent extends Form { 
    private Component componentActual; 
    private Command commandReplace; 

    public FormReplaceComponent() { 
     setTitle("FormReplaceComponent"); 
     setScrollable(false); 
     setLayout(new BorderLayout()); 
     Container contentPane = getContentPane(); 
     FloatingActionButton badge = FloatingActionButton.createBadge("123"); 
     contentPane.add(BorderLayout.CENTER, badge); 
     componentActual = badge; 
     SpanLabel spanLabel = new SpanLabel(
       "The quick brown fox jumps over the lazy dog"); 
     CommonTransitions commonTransitions = CommonTransitions.createFade(800); 
     Transition transitionWrapper = new Transition() { 
      @Override 
      public void initTransition() { 
       commandReplace.setEnabled(false); 
       commonTransitions.init(getSource(), getDestination()); 
       commonTransitions.initTransition(); 
      } 
      @Override 
      public void paint(Graphics aGraphics) { 
       commonTransitions.paint(aGraphics); 
      } 
      @Override 
      public boolean animate() { 
       return commonTransitions.animate(); 
      } 
      @Override 
      public void cleanup() { 
       commonTransitions.cleanup(); 
       commandReplace.setEnabled(true); 
       super.cleanup(); 
      } 
     }; 
     commandReplace = new Command("Replace") { 
      public void actionPerformed(ActionEvent aActionEvent) { 
       if (componentActual == badge) { 
        contentPane.replace(badge, spanLabel, transitionWrapper); 
        componentActual = spanLabel; 
       } else { 
        contentPane.replace(spanLabel, badge, transitionWrapper); 
        componentActual = badge; 
       } 
      } 
     }; 
     getToolbar().addCommandToRightBar(commandReplace); 
    } 
} 

答えて

0

「置き換え」は同様のサイズの部品を必要とするそうでなければ、原因官能基の性質にスキップが表示されます。通常はComponent.setSameSize()を使用しています。

あなたが使ったトランジションデコレータは正しいとは思いませんが、それは伝えにくいです。

有効は、コマンドを追加する前にのみ適用されます。そうしないと、コマンドはすべてのコンポーネントを追跡する必要があり、これがリークを引き起こす可能性があります。あなたはfindCommandComponent &を有効にして使用できます。

+0

'enabled'属性を更新するために' com.codename1.ui.Toolbar.findCommandComponent(Command) 'を使うことはうまくいきます、ありがとうございます。 'com.codename1.ui.Com.setSameSize(Component ...)'が使用されていても、コンポーネントが 'com.codename1.ui.layouts.BorderLayout.CENTER'であるために必要ではないはずですが、 Transitionはコンポーネントを目に見える形でペイントします。これはシミュレータとiPhone 5Sでも発生します。 –

+0

'SpanLabel'は明らかにアニメーション中に下と下に移動します。バッジ、 'FloatingActionButton'は、明らかに成長します。これはコンポーネントが画像にペイントされ、これがペイントとは異なるためですか? –

+0

それは可能です。それはフェードだけであるのですか、それとも他のトランジションで起こりますか?トランジションを直接使用すると起こりますか? –

関連する問題