AndroidはiPhoneリストのデータをまねてViewを更新します。


私はさまざまなページの間をジャンプする時に面白いアニメをつけるのが好きです。今日は何気なく見た動画の効果がいいです。いくつかの効果図は以下の通りです。面白いならブログに書いてください。
無駄話は多く言わないで、先に効果を行って、コードを見ます!
効果1:

効果二:

効果三:

効果四:(ミスの効果)

効果五(回転効果一):

効果六(回転効果二):

効果はもう読み終わりました。上の効果の実現の具体的なコードを見にきてください。中間は自分で試して、犯したミスを全部注釈の形式で書きます。みんなが使う時は間違えないでください。まず使っているレイアウトファイルを見てみます。簡単なレイアウトです。
XML/HTMLコード

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="fill_parent" 
 android:layout_height="fill_parent" 
 android:orientation="vertical" > 
 <ListView 
 android:id="@+id/firstPage" 
 android:layout_width="fill_parent" 
 android:layout_weight="1.0" 
 android:layout_height="0dip"/> 
 <ListView 
 android:id="@+id/secondPage" 
 android:layout_width="fill_parent" 
 android:layout_weight="1.0" 
 android:layout_height="0dip" 
 android:visibility="gone"/> 
 <Button 
 android:id="@+id/startNext" 
 android:layout_width="fill_parent" 
 android:layout_height="wrap_content" 
 android:text="@string/next" 
 
 /> 
 
</LinearLayout> 
XML/HTMLコード
<strong>以上の効果を実現するための具体的なコードを見てみます。コードに表示されている順番は上に表示されている効果図と一致しています。     
Javaコード

package com.xiaoma.www; 
 
import android.animation.Animator; 
import android.animation.AnimatorListenerAdapter; 
import android.animation.ObjectAnimator; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.animation.AccelerateInterpolator; 
import android.view.animation.CycleInterpolator; 
import android.view.animation.DecelerateInterpolator; 
import android.view.animation.Interpolator; 
import android.view.animation.OvershootInterpolator; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
 
/** 
* @Title: BetweenAnimationActivity.java 
* @Package com.xiaoma.www 
* @Description:       iPhone         
* @author XiaoMa 
*/ 
 
public class BetweenAnimationActivity extends Activity implements OnClickListener { 
 
 /**    */ 
 private Button startNext = null ; 
 private ListView firstPage = null ; 
 private ListView secondPage = null ; 
 
 /**     */ 
 private static final String firstItem[] = 
 {"    ","    ","    ","    ","    ","    ","    "}; 
 
 private static final String secondItem[] = 
 {"   ","   ","   ","   ","   ","   ","   "}; 
 
 /**              */ 
 private Interpolator accelerator = new AccelerateInterpolator(); 
 private Interpolator decelerator = new DecelerateInterpolator(); 
 
 /**      :              */ 
 private Interpolator accelerator1= new CycleInterpolator(45f); 
 private Interpolator decelerator1= new OvershootInterpolator(); 
 
 /** Called when the activity is first created. */ 
 @Override 
 public void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.main); 
 
 /** 
  *       ,       onCreate         , 
  *                      onCreate()    
  *  ,  :  、      setContentView()   , 
  *    onCreate()         ,   :  !! 
  * */ 
 
 init(); 
 } 
 
 /** 
 *       
 */ 
 private void init(){ 
 
 /**    ,    */ 
 startNext = (Button)findViewById(R.id.startNext); 
 startNext.setOnClickListener(this); 
 
 firstPage = (ListView)findViewById(R.id.firstPage); 
 secondPage = (ListView)findViewById(R.id.secondPage); 
 
 ArrayAdapter<String> firstAdapter = new ArrayAdapter<String> 
  (this, android.R.layout.simple_list_item_1,firstItem); 
 ArrayAdapter<String> secondAdapter = new ArrayAdapter<String> 
  (this, android.R.layout.simple_list_item_1, secondItem); 
 
 firstPage.setAdapter(firstAdapter); 
 secondPage.setAdapter(secondAdapter); 
 
 } 
 
 @Override 
 public void onClick(View v) { 
 changePage(); 
 } 
 
 //         
 
 private void changePage() { 
 
 final ListView visiable ; 
 final ListView invisiable ; 
 
 if(firstPage.getVisibility() == View.GONE){ 
  visiable = secondPage ; 
  invisiable = firstPage ; 
 }else{ 
  visiable = firstPage ; 
  invisiable = secondPage ; 
 } 
 
//           ObjectAnimator   ,             ,   ,     ,            , //    ,       ,   ,    ,         ,       :    ValueAnimator   ,      //                 
 
 //   (              ) 
 //final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "rotationX",-90f, 0f); 
 ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "rotationX", 0f, 90f); 
 
 //    
 final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "rotationY",-90f, 0f); 
  ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "rotationY", 0f, 90f); 
 
 //   (     alpha         :           !!!) 
 //final ObjectAnimator invisToVis = ObjectAnimator.ofFloat(invisiable, "alpha", 0.0f, 1.0f ); 
 //ObjectAnimator visToInvis = ObjectAnimator.ofFloat(visiable, "alpha", 1.0f, 0.0f ); 
 
//   (          ,          rotationZ    ,     , ofFloat          ,    //         ,                    ,          ,    ,        ListView  //  ,           ,         ): ObjectAnimator.ofFloat(invisiable, "rotationZ",-90f, 0f); 
 
  visToInvis.setDuration(500); 
  visToInvis.setInterpolator(accelerator); 
  invisToVis.setDuration(500); 
  invisToVis.setInterpolator(decelerator); 
 
//       ,              ,          :              :  、  、    、 //     ,    : Animation         ,        
  visToInvis.addListener(new AnimatorListenerAdapter() { 
  @Override 
  public void onAnimationEnd(Animator anim) { 
 
   /* 
   *          : 
   *  :anim.isRunning(){//TODO} 
   *  :anim.isStarted(){//TODO} 
   *  :anim.end(){//TODO} 
   */ 
 
   visiable.setVisibility(View.GONE); 
   invisToVis.start(); 
   invisiable.setVisibility(View.VISIBLE); 
  } 
  }); 
  visToInvis.start(); 
 } 
 
}
最後に、文章のタイトルの中では改ページ動画と言いますが、これらのアニメはページの上だけではなく、補間器やアニメを柔軟に使えば、個性的な多くのアニメの応用ができます。さらにActivityの間のアニメと以上の組み合わせがもっと完璧です。Activityの間のアニメーションは、私が以前書いたこの文章を参照してください。