overridePendingTransition
メソッドを使用してカスタムアクティビティアニメーションを実行しています。
アニメーションがいつ終了するか知りたいです(コールバック/リスナー)。
これを達成する直接的な方法はありますか?そうでない場合は、回避策を提案してください。
overridePendingTransition
にはリスナーがありません。以前の投稿を書いたように、overridePendingTransition
の代わりに通常のアニメーションを使用したい(つまり、Android 2.0以降)。
同様の効果を得ることができ、通常のアニメーションでよりクールなことを行うこともできます。ここでの私の以前の投稿: XMLをゆっくりロードする
このメソッドを使用して、アニメーション(アニメーションXMLのresID)を開始します。 nextPuzzleOnEndがtrueの場合、アニメーションが終了したときにメソッド「nextPuzzle」が呼び出されます。
この方法は私のパズルアプリの一部であり、成功したアニメーションを表示するために使用し、その後(アニメーションが終了した後)次のパズルを続行します。
/*
* start animation (any view)
*/
private void startAnimation(View v, int resId, Boolean nextPuzzleOnEnd){
Animation anim;
if(v!=null){ // can be null, after change of orientation
anim = AnimationUtils.loadAnimation(this.getContext(),resId);
anim.setFillAfter(false);
v.setAnimation(anim);
if( nextPuzzleOnEnd ){
anim.setAnimationListener(new AnimationListener() {
public void onAnimationStart(Animation anim)
{
};
public void onAnimationRepeat(Animation anim)
{
};
public void onAnimationEnd(Animation anim)
{
nextPuzzle();
};
});
}
v.startAnimation(anim);
}
}
この質問でGoogleを閲覧できなかった後、すべてのオーバーライド方法を実行して解決策を見つけました。
だから私がしたことは、画面に入っているアクティビティでこのメソッドをオーバーライドすることでした:
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
}
@Hambugソリューションは素晴らしいです。しかし、問題があります。 onEnterAnimationCompleteは、Lollipop以降のAPI(21)で動作します。
@Override
public void onEnterAnimationComplete() {
super.onEnterAnimationComplete();
//write code here.
}
上記のメソッドで記述したコードは、prelolipopデバイスでは実行されません。したがって、バージョンチェックを入れて、必要に応じて書き込む必要があります。 onCreateで。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.Lollipop){
//write code here.
}