3d 中的 Android ViewGroup 旋转

标签 android 3d rotation

我想在 android 中以 3d 旋转我自己的 FrameLayout。我必须使用 GlSurfaceView 类吗?我是计算机图形学的新手,但知道旋转和平移背后的理论。为了进行 3d opengl 旋转,我们通常执行以下操作。

在 Activity 类中,我们创建一个 GLSurfaceView 对象并设置其渲染器。渲染器对象是从实现 GlSurfaceView.Renderer 接口(interface)的类创建的。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GLSurfaceView view = new GLSurfaceView(this);
    view.setRenderer(new OpenGLRenderer());
    setContentView(view);
}

在我们的 Renderer 类中,我们使用以下方法进行绘图、旋转和平移

// Called when the surface is created or recreated.
public void onSurfaceCreated(GL10 gl, EGLConfig config) 

// Called to draw the current frame.
public void onDrawFrame(GL10 gl)

// Called when the surface changed size.
public void onSurfaceChanged(GL10 gl, int width, int height)

但是我有一个自定义的框架布局,声明为

public class RotatedMapView extends FrameLayout

我想做这个:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    RotatedMapView  view = new RotatedMapView (this);
    view.setRenderer(new OpenGLRenderer());
    setContentView(view);
}

但我不能,因为 setRenderer 对 GlSurfaceView 是特殊的。我现在正在浏览 GlSurfaceView.java 源代码以使其适应我的设计。我为 GlSurfaceVİew.java 找到的链接是 http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest/src/com/android/spritemethodtest/GLSurfaceView.java?r=150 源太长了。事实上,我并不懒惰阅读它,但我想确定我的阅读方式是否正确。

最佳答案

现在我正在看我从未使用过的动画。在 api 演示中,有一个在 y 轴上旋转的示例。我想在 x 上进行旋转。它对负角度是成功的,但在正方向上它会消失 View 。函数如下。

@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);

关于3d 中的 Android ViewGroup 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5398882/

相关文章:

C++ OpenGL : How to make a second circle over the cylinder?

javascript - 3d.js - 更新力导向图上的节点

graphics - 我应该在管道的哪个阶段进行剔除和裁剪以及裁剪后我应该如何重建三角形

android - 在 Android 中正确旋转 MapView 的最简单方法?

android旋转动画在中断时获取当前角度/度数

android - ProgressDialog 的自定义背景颜色

android - Cordova 相机不会旋转图片以纠正三星 S3 上的方向

Android -- 有没有办法将 toast 旋转 90 度?

android - 有没有办法让 Fruit Ninja 应用程序在 Android 设备上无限运行?

ios - 强制 View Controller 为纵向单点触控 iphone