3

アクティビティを切り替えるときに、個々のビューでアニメーションをトリガーするにはどうすればよいですか?つまり、ユーザーがボタンをクリックして次のページに移動した場合、画面全体を1つの部分としてアニメーション化するのではなく、一部のビューを画面から飛び出させ、背景を次の画面にクロスフェードさせたいと考えています。

これは可能ですか?もしそうなら、それはどのように行われるべきですか?(私は最新のAPI 4.1を使用していますが、下位互換性がある必要はありません)

編集:現在、トランジションインアニメーションの実行はonResume()で呼び出すことで正常に機能していますが、押し戻すと、アクティビティはonPause()で開始されたどのアニメーションよりも速く切り替わるため、より良い方法/場所があると思いますこれをする。

4

2 に答える 2

2

次のようなアクティビティを切り替えると、アニメーション(スライドなど)を設定できます。

  1. resフォルダーにanimフォルダーを作成します
  2. たとえば、スライド用に2つのxmlファイルを配置します。

slide_in.xml

 <set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false">
        <translate android:fromXDelta="100%" android:toXDelta="0%"
          android:fromYDelta="0%" android:toYDelta="0%"
         android:duration="200"/>
  </set>

slie_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
         android:shareInterpolator="false">
      <translate
       android:fromXDelta="100%" android:toXDelta="0%"
       android:fromYDelta="0%" android:toYDelta="0%"
       android:duration="200" />
    </set>
  1. 次に、Javaコードに次のように記述します。

    Intent i = new Intent(YourActivity.this, OtherActivity.class);
        this.startActivity(i);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
    

実際のデバイスでそれをテストしている場合は、アニメーションの再生を許可することを忘れないでください([設定]->[表示]->[アニメーション]->[すべてのアニメーション])

それが役に立てば幸い !:)

于 2012-08-13T20:34:23.823 に答える
2

onResume()のオーバーライドは正常に機能しますが、onPause / onStopは、アニメーションが完了するのを待たずに次の画面に移動します。

イベントを開始するものex。ボタンクリックは、開始アクティビティが呼び出される前にアニメーションを開始する必要があります。

button.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        // start animations
        // wait till they are finished
        // start activity
    }
});

新しいアクティビティを開始するすべてのイベントにはアニメーションコードが含まれるため、コードがいたるところに重複しないように、それをある種のヘルパークラスに移動することもお勧めします。元。

button1.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        helper.AnimateViews(/* probably pass activity or context */); 

        // start activity
    }
});

button2.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        helper.animateViews(/* probably pass activity or context */); 

        // start activity
    }
});

public class ViewAnimiationHelper {

    public void animateViews(Activity activity) {

        // find all views if not found then don't animate them
        View view1 = activity.findViewById(R.id.view1);

        if(view1 != null) {

            // animate view
        }

        View view2 = activity.findViewById(R.id.view1);

        if(view2 != null) {

            // animate view
        }
    }
}

これはすべてsudojavaコードですが、うまくいけば、アイデアを得るのに十分です。幸運を!

于 2012-08-14T19:26:14.923 に答える