可以在RelativeLayout内部的表面上使用setFixedSize吗?

时间:2014-09-22 21:08:26

标签: android android-layout android-ndk android-fullscreen

我正在尝试使用setFixedSize来加速具有非常大的屏幕尺寸的平板电脑上的游戏http://android-developers.blogspot.ca/2013/09/using-hardware-scaler-for-performance.html

我遇到的问题是我目前有一个RelativeLayout,我将Surface添加到。

作为测试用例,我使用了gl2jni NDK示例应用程序,并在init方法中将getHolder()。setFixedSize(128,128)调用添加到GJ2JNIView.java中。这恰好创造了一个丑陋的128x128缓冲区,它被扩展到全屏并且完全按照我的预期工作。

然后我在JL2JNIActivity中修改了onCreate方法,如下所示。

@Override protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    mView = new GL2JNIView(getApplication());

    boolean useRelativeLayout = false;
    if ( useRelativeLayout ) {
      mLayout = new RelativeLayout(this);
      RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
      mLayout.setLayoutParams(param);
      mLayout.addView(mView);

      setContentView(mLayout);
    } else {
      setContentView(mView);
    }
}

当我将useRelativeLayout设置为false,并且setContentView直接使用我调用setFixed size的GL2JNIView时,它按预期工作。

当我将useRelativeLayout设置为true时,它会在左上角显示mView为一个小的128x128缓冲区。

1 个答案:

答案 0 :(得分:1)

所以在看了之后,我没有在mView上设置我的layoutParams。

通过在我的mView上将布局参数设置为以下内容,它可以正确缩放mView

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);

mView.setLayoutParams(lp);