`
wrq2010
  • 浏览: 32483 次
社区版块
存档分类
最新评论

android 3d 旋转

 
阅读更多
在javaeye里看到了关于3d旋转的文章
效果图:


这是你想要的吗?如果是就继续往下看吧。其实,这个效果是用animation配合camera做出来的,相信大家在apidemo里面看过类似的。
那么先写一个继承animation的类:Rotate3d
Rotate3d代码 
public class Rotate3d extends Animation {  
    private float mFromDegree;  
    private float mToDegree;  
    private float mCenterX;  
    private float mCenterY;  
    private float mLeft;  
    private float mTop;  
    private Camera mCamera;  
    private static final String TAG = "Rotate3d";  
 
    public Rotate3d(float fromDegree, float toDegree, float left, float top,  
            float centerX, float centerY) {  
        this.mFromDegree = fromDegree;  
        this.mToDegree = toDegree;  
        this.mLeft = left;  
        this.mTop = top;  
        this.mCenterX = centerX;  
        this.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 FromDegree = mFromDegree;  
        float degrees = FromDegree + (mToDegree - mFromDegree)  
                * interpolatedTime;  
        final float centerX = mCenterX;  
        final float centerY = mCenterY;  
        final Matrix matrix = t.getMatrix();  
 
        if (degrees <= -76.0f) {  
             degrees = -90.0f;  
             mCamera.save();  
             mCamera.rotateY(degrees);  
             mCamera.getMatrix(matrix);  
             mCamera.restore();  
        } else if(degrees >=76.0f){  
            degrees = 90.0f;  
            mCamera.save();  
            mCamera.rotateY(degrees);  
            mCamera.getMatrix(matrix);  
            mCamera.restore();  
        }else{  
            mCamera.save();  
                       //这里很重要哦。  
            mCamera.translate(0, 0, centerX);  
            mCamera.rotateY(degrees);  
            mCamera.translate(0, 0, -centerX);  
            mCamera.getMatrix(matrix);  
            mCamera.restore();  
        }  
 
        matrix.preTranslate(-centerX, -centerY);  
        matrix.postTranslate(centerX, centerY);  
    }  

有了这个类一切都会变得简单的,接着只要在activity中写两个Rotate3d的对象,让两个view,分别做这两个对象的animation就好了。(原来就这么简单啊!无语)



Activity代码 
//下面两句很关键哦,呵呵,心照不宣。  
        Rotate3d leftAnimation = new Rotate3d(-0, -90, 0, 0, mCenterX, mCenterY);  
        Rotate3d rightAnimation = new Rotate3d(-0+90, -90+90, 0.0f, 0.0f, mCenterX, mCenterY);  
 
        leftAnimation.setFillAfter(true);  
        leftAnimation.setDuration(1000);  
        rightAnimation.setFillAfter(true);  
        rightAnimation.setDuration(1000);  
 
        mImageView1.startAnimation(leftAnimation);  
        mImageView2.startAnimation(rightAnimation); 

还要写一下mImageView1,mImageView2的xml,



Xml代码 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    > 
 
    <FrameLayout 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"> 
 
                   <ImageView 
                    android:id="@+id/image1" 
                    android:layout_gravity="center_horizontal" 
                    android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" 
                    android:src="@drawable/image1" 
                    /> 
                   <ImageView 
                    android:id="@+id/image2" 
                    android:background="#ffff0000" 
                    android:layout_gravity="center_horizontal" 
                    android:layout_width="fill_parent" 
                    android:layout_height="wrap_content" 
                    android:src="@drawable/image2" 
                    /> 
 
    </FrameLayout> 
</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

                   <ImageView
    android:id="@+id/image1"
    android:layout_gravity="center_horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image1"
    />
                   <ImageView
    android:id="@+id/image2"
    android:background="#ffff0000"
    android:layout_gravity="center_horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image2"
    />

    </FrameLayout>
</LinearLayout> 写完收工。如果有不足之处,还请朋友们不吝指教。

  • 大小: 19.5 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics