2D翻转

视频http://www.jikexueyuan.com/course/341.html

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/root"
    tools:context="com.example.card2d.MainActivity" >

    <ImageView
        android:id="@+id/ivA"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background_1"/>
    
    <ImageView
        android:id="@+id/ivB"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/background_2"/>
    
</FrameLayout>

MainActivity.java

public class MainActivity extends Activity {
	
	//声明变量
	private ImageView imageA;
	private ImageView imageB;
	
	private ScaleAnimation sato0=new ScaleAnimation(1,0,1,1, 
			Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0.5f);
    private ScaleAnimation sato1=new ScaleAnimation(0,1,1,1, 
    		Animation.RELATIVE_TO_PARENT,0.5f,Animation.RELATIVE_TO_PARENT,0.5f);


	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//调用初始化方法
		initView();
				
		//注册监听器,匿名内部类
		findViewById(R.id.root).setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//当点击图片的时候我们应该让A来进行执行
				//启动动画,让它来加载图片A
				//判断imageA是否是显示的
				if(imageA.getVisibility()==View.VISIBLE){
					//让imageA加载第一个动画
					imageA.startAnimation(sato0);
				}
				else{
					//让imageB加载第二个动画
					imageB.startAnimation(sato0);
				}
			}
		});
	}
	
	//让图片A显示,图片B隐藏
	private void showImageA(){
		imageA.setVisibility(View.VISIBLE);
		imageB.setVisibility(View.INVISIBLE);
	}
	//让图片A隐藏,图片B显示
	private void showImageB(){
		imageA.setVisibility(View.INVISIBLE);
		imageB.setVisibility(View.VISIBLE);
	}
	//写一个初始化方法,让A显示
	private void initView(){
		//获得对象引用
		imageA=(ImageView)findViewById(R.id.ivA);
		imageB=(ImageView)findViewById(R.id.ivB);
		//让图片A显示
		showImageA();
		//给动画添加执行时间0.5秒
		sato0.setDuration(500);
		sato1.setDuration(500);
		//给第一个动画添加一个监听事件,当第一个动画执行完毕后执行第二个动画
		sato0.setAnimationListener(new Animation.AnimationListener() {
			
			//动画开始执行触发
			@Override
			public void onAnimationStart(Animation animation) {
				// TODO Auto-generated method stub
				
			}
			
			//动画重复执行触发
			@Override
			public void onAnimationRepeat(Animation animation) {
				// TODO Auto-generated method stub
				
			}
			
			//动画停止执行触发
			@Override
			public void onAnimationEnd(Animation animation) {
				// TODO Auto-generated method stub
				//监听第一个动画什么时候停止,停止了让它执行第二个
				//判断第一个动画是否是显示的
				if(imageA.getVisibility()==View.VISIBLE){
			        //因为这是结束的动画监听,如果第一个动画是显示的,
					//那么我们需要将它隐藏,然后执行第二个动画
					//将第一张动画清空
					imageA.setAnimation(null);
					//调用第二张动画
					showImageB();
					//同时给showB添加上动画效果
					imageB.startAnimation(sato1);
				}
				else{//如果是第二张动画正在执行
					//将第二张动画清空
					imageB.setAnimation(null);
					//调用第一张动画
					showImageA();
					//同时给showA添加上动画效果
					imageA.startAnimation(sato1);
				}
			}
		});
	}	
}

相关推荐