web-dev-qa-db-ja.com

android-viewflipperの単純なフェードアウトおよびフェードインアニメーション

Androidは初めてで、Androidアニメーションについてはよくわかりません。ビューフリッパーがあり、その中の画像間でアニメーションを作成したいのですが。 。これはコードです:

 runnable = new Runnable() {
           public void run() {
            handler.postDelayed(runnable, 3000);
            imageViewFlipper.setInAnimation(fadeIn);
            imageViewFlipper.setOutAnimation(fadeOut);
            imageViewFlipper.showNext();
           }
          };
          handler = new Handler();
          handler.postDelayed(runnable, 500);
    }

2つのアニメーションファイルは良くありません、彼らは非常にひどくアニメーションします。前の画像をフェードアウトして次の画像をフェードインし、その中のすべての画像に対して同じことを行うためのコードが必要です。

誰かが私を助けることができますか?

ありがとうございました

16
mohsen

これらのリンクを参照してください。アニメーションxmlもあります。

リンク1リンク2

クラスの例:

public class ViewFlipperMainActivity extends Activity
{
    private ViewFlipper viewFlipper;
    private float lastX;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.view_flipper_main);
                 viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper);
    }



    // Method to handle touch event like left to right swap and right to left swap
    public boolean onTouchEvent(MotionEvent touchevent)
    {
     switch (touchevent.getAction())
     {
        // when user first touches the screen to swap
         case MotionEvent.ACTION_DOWN:
         {
             lastX = touchevent.getX();
             break;
        }
         case MotionEvent.ACTION_UP:
         {
         float currentX = touchevent.getX();

         // if left to right swipe on screen
         if (lastX < currentX)
         {
              // If no more View/Child to flip
             if (viewFlipper.getDisplayedChild() == 0)
                 break;

             // set the required Animation type to ViewFlipper
             // The Next screen will come in form Left and current Screen will go OUT from Right
             viewFlipper.setInAnimation(this, R.anim.in_from_left);
             viewFlipper.setOutAnimation(this, R.anim.out_to_right);
             // Show the next Screen
             viewFlipper.showNext();
         }

         // if right to left swipe on screen
         if (lastX > currentX)
         {
             if (viewFlipper.getDisplayedChild() == 1)
                 break;
             // set the required Animation type to ViewFlipper
             // The Next screen will come in form Right and current Screen will go OUT from Left
             viewFlipper.setInAnimation(this, R.anim.in_from_right);
             viewFlipper.setOutAnimation(this, R.anim.out_to_left);
             // Show The Previous Screen
             viewFlipper.showPrevious();
         }
         break;
         }
        }
     return false;
    }
}

フェードインアウトUsiong Javaコード:

Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
fadeIn.setDuration(1500); //time in milliseconds

Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1500); //time in milliseconds

AnimationSet animation = new AnimationSet(false); //change to false
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
this.setAnimation(animation);

アニメーションXML:

フェードイン:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:interpolator="@Android:anim/linear_interpolator">
  <alpha
      Android:fromAlpha="0.1"
      Android:toAlpha="1.0"
      Android:duration="2000"
      />
</set>

フェードアウト:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:interpolator="@Android:anim/linear_interpolator">
  <alpha
      Android:fromAlpha="1.0"
      Android:toAlpha="0.1"
      Android:duration="2000"
      />
</set>

in_from_left.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="1400" />
</set>

in_from_right.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="1400" />
</set>

out_to_left.xml

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

out_to_right.xml

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

view_flipper_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <ViewFlipper
        Android:id="@+id/view_flipper"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">
        <!--  The child Views/Layout to flip -->
        <ImageView
            Android:layout_marginTop="15dp"
            Android:id="@+id/imageView1"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:src="@drawable/image1" />
        <ImageView
            Android:layout_marginTop="15dp"
            Android:id="@id/imageView1"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:src="@drawable/image2" />
    </ViewFlipper>
</LinearLayout>

編集:

2年以上経ち、多くの人がこの回答を参照しているようです。マテリアルデザインの移行といくつかの新しい移行を支援するために、ここにいくつかの参照リンクがあります。

すべてのものをアニメーション化します。Androidでの遷移

マテリアル-アニメーション

32
Sagar Pilkhwal