3

Android フラグメントでカードをめくるアニメーションを実装しようとしています。このようにして、前面に独自のカスタムビューを表示し、背面と同じにすることができます。

私の問題は、カードの裏が表示されているときです。つまり、フリップアニメーションが以前に一度呼び出されたことを意味します。ボタンをクリックしてフロントフラグメントを再度表示すると、以下のエラーでアプリケーションがクラッシュします。

07-31 20:26:14.649: E/AndroidRuntime(28575): FATAL EXCEPTION: main
07-31 20:26:14.649: E/AndroidRuntime(28575): java.lang.NullPointerException
07-31 20:26:14.649: E/AndroidRuntime(28575):    at com.Pivotl.PostcardsFromAlaska.PFANewPostcard_Activity.flipCard(PFANewPostcard_Activity.java:174)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at com.Pivotl.PostcardsFromAlaska.PFANewPostcard_Activity.access$0(PFANewPostcard_Activity.java:168)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at com.Pivotl.PostcardsFromAlaska.PFANewPostcard_Activity$2.onClick(PFANewPostcard_Activity.java:99)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.view.View.performClick(View.java:4223)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.view.View$PerformClick.run(View.java:17281)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.os.Handler.handleCallback(Handler.java:615)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.os.Looper.loop(Looper.java:137)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at android.app.ActivityThread.main(ActivityThread.java:4898)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at java.lang.reflect.Method.invokeNative(Native Method)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at java.lang.reflect.Method.invoke(Method.java:511)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
07-31 20:26:14.649: E/AndroidRuntime(28575):    at dalvik.system.NativeStart.main(Native Method)

私のアニメーションは、このチュートリアルから作成されました: http://developer.android.com/training/animation/cardflip.html

次に、3つの方法があります

  1. フリップカード()
  2. フリップフロント()
  3. フリップバック()

フリップカード():

private void flipCard()
    {
        Log.d(tag2, "Log after flipCard:" + mShowingBack);
        if(mShowingBack)
        {
            //Check Items and Save variables
            if(backMessageEdit.getText().toString() != null){
                //save string
                 backMessage = backMessageEdit.getText().toString();
            }
            //show front
            flipFront();
             return;
        }
        // Flip to back
        flipBack();
    }

フリップフロント():

private void flipFront()
    {
        mShowingBack = false;
        getFragmentManager()
        .beginTransaction()
        .setCustomAnimations(R.animator.card_flip_left_in, R.animator.card_flip_left_out,
                R.animator.card_flip_right_in, R.animator.card_flip_right_out)
        .replace(R.id.postcardFrame, new CardFrontFragment())
        .addToBackStack(null)
        .commit();

    }

フリップバック():

private void flipBack()
    {
        getFragmentManager()
        .beginTransaction()
        .setCustomAnimations(
                R.animator.card_flip_right_in, R.animator.card_flip_right_out,
                R.animator.card_flip_left_in, R.animator.card_flip_left_out)
        .replace(R.id.postcardFrame, new CardBackFragment())
        .addToBackStack(null)
        .commit();
        mShowingBack = true;
    }

ボタンをクリックすると、次のようにflipCardを呼び出します。

cardBackButton.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View v) {
                //Check what side is showing
                //Then perform flip left or right
                flipCard();
            }
        });

非常に簡単に見えますが、指を巻き付けることができないようです。先日置いて、今戻ってきています。

この問題について何か助けていただければ幸いです。

4

1 に答える 1