1

ボタンのクリックによってトリガーされるいくつかのことを実行します。

    private void onSearchPressed() {

    title.setVisibility(View.GONE);
    etActionSearch.setVisibility(View.VISIBLE);
    etActionSearch.requestFocus();
    btnActionFavs.setVisibility(View.GONE);
    etActionSearch.setAnimation(AnimationUtils.loadAnimation(
            getApplicationContext(), R.anim.et_anim_open));
    isSearch = true;

}

したがって、基本的には一部を非表示にしViewsて他の一部を表示するだけです。EditText単純なセットを使用して「スライドアウト」していAnimationます。

アクションがキャンセルされると、プロセスが逆になります。

    private void onSearchCancelled() {
            etActionSearch.setAnimation(AnimationUtils.loadAnimation(
            getApplicationContext(), R.anim.et_anim_close));
    etActionSearch.setVisibility(View.GONE);
    btnActionFavs.setVisibility(View.VISIBLE);
    title.setVisibility(View.VISIBLE);
    isSearch = false;

}

私がやりたいのは、アニメーション (反対方向) を私の に適用することですEditText。そのため、スライド アニメーションでも消えます。問題は、すべてのコードがすぐに実行されるため、EditTextアニメーションが完了する前に が消えてしまうことです。AsyncTaskを使用してアニメーションをdoInBackground()メソッド内に配置し、の可視性を設定するなど、いくつかの奇妙なことを試しViewsましonPostExecute()たが、何も変わりSystemClock.sleep()ませんでした..また、ラグの印象以外は何もしません。解決策はありますか?

4

2 に答える 2

2

アニメーションは非同期で実行されるためAnimationListener、そのアニメーションで を使用し、アニメーションが終了したときに実行するコードを に配置する必要がありますonAnimationEnd()

ドキュメントを参照してください: http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html

于 2013-08-08T13:24:19.457 に答える
1

Marcin Orlowski が言ったようAnimationListenerに、Animation. アニメーションが終了するとonAnimationEnd()、自分のことを行うことができるイベントが開始されます。

ここに私がどのように見えるかの小さな例があります:

Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.your_specific_animation);
animation.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            // Do your hiding stuff here
        }
    });

etActionSearch.startAnimation(animation);
于 2013-08-08T13:33:22.710 に答える