Android ViewGroup Rotation in 3d

前端 未结 2 959
时光说笑
时光说笑 2021-01-16 10:09

I want to rotate my own FrameLayout in 3d in android. Do i have to use GlSurfaceView class. I am new in computer graphics but know the theory behind the rotations and transl

相关标签:
2条回答
  • 2021-01-16 10:42

    Framelayouts (and anything extending View) are designed to be drawn on a Canvas element in 2D. It is not possible to draw these using openGL. If you want to draw a GUI in 3D/GL then you will have to code that up from scratch or find a library which has already done this. I'm sure there are a few out there but I haven't had the need for one yet.

    You can get some fake looking 3D effects on views by using scale animations, though these will only work if the animation is done fast so the user doesn't notice. This probably isn't what you are after.

    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1.0" android:toXScale="0.0"
        android:fromYScale="1.0" android:toYScale="1.0"
        android:pivotX="50%" android:pivotY="0%"
        android:duration="@android:integer/config_shortAnimTime"
    />
    

    0 讨论(0)
  • 2021-01-16 10:46

    Now i am looking at animations which i have never used. In api demos there is a rotation example over y axis. I want to make rotation over x. It is succesful for negative angles but in positive direction it disappears the view. The function is below.

    @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();
        if (mReverse) {
            camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
        } else {
            camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
        }
        camera.rotateY(degrees);
        `camera.rotateX(degrees);  //i want to do this it works for negative but not` //positive angles 
    
    camera.getMatrix(matrix);
    camera.restore();
    
    matrix.preTranslate(-centerX, -centerY);
    matrix.postTranslate(centerX, centerY);
    

    }

    0 讨论(0)
提交回复
热议问题