我有一个想法,3D通过使用FrameLayout在屏幕上的应用动画。有两个不同的布局(magicnumber.xml & selectteam.xml),您想要将其放置在FrameLayout中。
必须有下面的XML代码
container.xml中
<FrameLayout >
<xmlns:android="http://schemas.android.com/apk/res/android" >
<android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/container"android:background="#000000" />
<include android:id="@+id/tshirtlist" layout="@layout/magicnumber" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
<include > android:layout_width="wrap_content" android:layout_height="wrap_content" layout="@layout/selectteam" android:id="@+id/Searchlist" ></include> </FrameLayout>
现在使用下面的代码在你的包 我的事情该代码帮助ü。这里有使用三个班在这里
1.Flip3dAnimation.java类
import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;
public class Flip3dAnimation extends Animation
{
private final float mFromDegrees;
private final float mToDegrees;
private final float mCenterX;
private final float mCenterY;
private Camera mCamera;
public Flip3dAnimation(float fromDegrees, float toDegrees,
float centerX, float centerY)
{
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mCenterX = centerX;
mCenterY = centerY;
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
mCamera = new Camera();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t)
{
final float fromDegrees = mFromDegrees;
float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
final float centerX = mCenterX;
final float centerY = mCenterY;
final Camera camera = mCamera;
final Matrix matrix = t.getMatrix();
camera.save();
camera.rotateY(degrees);
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
}
}
2.DisplayNextView.java类
public final class DisplayNextView implements Animation.AnimationListener
{
private boolean mCurrentView;
RelativeLayout image1;
RelativeLayout image2;
public DisplayNextView(boolean currentView, RelativeLayout rl_front, RelativeLayout rl_back)
{
mCurrentView = currentView;
this.image1 = rl_front;
this.image2 = rl_back;
}
public void onAnimationStart(Animation animation)
{
}
public void onAnimationEnd(Animation animation)
{
image1.post(new SwapViews(mCurrentView, image1, image2));
}
public void onAnimationRepeat(Animation animation)
{
}
}
3.SwapViews.java类
public final class SwapViews implements Runnable
{
private boolean mIsFirstView;
RelativeLayout image1;
RelativeLayout image2;
public SwapViews(boolean isFirstView, RelativeLayout image12, RelativeLayout image22)
{
mIsFirstView = isFirstView;
this.image1 = image12;
this.image2 = image22;
}
public void run()
{
final float centerX = image1.getWidth()/2.0f;
final float centerY = image1.getHeight()/2.0f;
Flip3dAnimation rotation;
if (mIsFirstView)
{
image1.setVisibility(View.GONE);
image2.setVisibility(View.VISIBLE);
image2.requestFocus();
rotation = new Flip3dAnimation(-90, 0, centerX, centerY);
}
else
{
image2.setVisibility(View.GONE);
image1.setVisibility(View.VISIBLE);
image1.requestFocus();
rotation = new Flip3dAnimation(-90, 0, centerX, centerY);
}
rotation.setDuration(300);
rotation.setFillAfter(true);
rotation.setInterpolator(new DecelerateInterpolator());
if (mIsFirstView)
{
image2.startAnimation(rotation);
}
else
{
image1.startAnimation(rotation);
}
}
}
now use following method to here u want to use Flip
protected void applyRotation(float start, float end) {
final float centerX = Rl_Main.getWidth()/2.0f;
final float centerY = Rl_Select.getHeight()/2.0f;
final Flip3dAnimation rotation =
new Flip3dAnimation(start, end, centerX, centerY);
rotation.setDuration(100);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new DisplayNextView(isFirstImage, Rl_Main, Rl_Select));
if (isFirstImage)
Rl_Main.startAnimation(rotation);
else
Rl_Select.startAnimation(rotation);
}
这种方法调用通过使用你想鳍效果显示
applyRotation(0, 90);
isFirstImage = !isFirstImage;
其中
private boolean isFirstImage = true;
RelativeLayout Rl_Main,Rl_Tshirt;
你试试这个代码 http://stackoverflow.com/questions/9833988/android-3d-flip-animation/9834115#9834115 – Android 2012-03-23 08:29:45
你为什么要发表意见onAnimationEnd回调中的clearAnimation()调用? – Blackbelt 2012-03-23 08:35:55