我想在 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/