没事自己写的:
package com.zgy.android;
import android.app.Activity;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
public class Transition3d extends Activity implements
AdapterView.OnItemClickListener {
private ListView mPhotosList;
private ViewGroup mContainer;
private ImageView mImageView;
private static final String[] PHOTOS_NAMES = new String[] { "Lyon",
"Livermore" };
private static final int[] PHOTOS_RESOURCES = new int[] {
R.drawable.sample_5, R.drawable.sample_7 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animations_main_screen);
mPhotosList = (ListView) findViewById(android.R.id.list);
mImageView = (ImageView) findViewById(R.id.picture);
mContainer = (ViewGroup) findViewById(R.id.container);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, PHOTOS_NAMES);
mPhotosList.setAdapter(adapter);
mPhotosList.setOnItemClickListener(this);
mPhotosList
.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
}
private void applyRotation(View view, int position, float start, float end) {
final float centerX = view.getWidth() / 2.0f;
final float centerY = view.getHeight() / 2.0f;
final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
centerX, centerY, 0.0f, true);
rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setFillEnabled(true);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new DisplayNextView(position));
view.startAnimation(rotation);
}
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
applyRotation(mPhotosList, position, 0, 90);
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
mImageView.setImageResource(PHOTOS_RESOURCES[position]);
Rotate3dAnimation rotation = new Rotate3dAnimation(0, -90, centerX, centerY, 0, false);
rotation.setFillAfter(true);
rotation.setFillEnabled(true);
rotation.setDuration(0);
mImageView.startAnimation(rotation);
}
private final class DisplayNextView implements Animation.AnimationListener {
private final int mPosition;
private DisplayNextView(int position) {
mPosition = position;
}
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mPhotosList.setVisibility(View.GONE);
mImageView.setVisibility(View.VISIBLE);
mContainer.post(new SwapViews());
}
public void onAnimationRepeat(Animation animation) {
}
}
private final class SwapViews implements Runnable {
public void run() {
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
Rotate3dAnimation rotation = new Rotate3dAnimation(-90, 0, centerX,
centerY, 0, false);
rotation.setDuration(500);
rotation.setFillEnabled(true);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
mImageView.startAnimation(rotation);
}
}
}