Android 使用SurfaceHolder.setFixedSize(宽度、高度)设置SurfaceView的大小
作为MainActivity类布局的一部分,我有一个SurfaceView:Android 使用SurfaceHolder.setFixedSize(宽度、高度)设置SurfaceView的大小,android,size,surfaceview,Android,Size,Surfaceview,作为MainActivity类布局的一部分,我有一个SurfaceView: <LinearLayout android:id="@+id/screen_game" android:layout_width="match_parent" android:layout_height="wrap_content" android:bac
<LinearLayout
android:id="@+id/screen_game"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0000FF"
android:orientation="vertical"
>
<Button
android:id="@+id/button15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<com.ecslayout.BackgammonBoardView
android:id="@+id/backgammonBoardView1"
android:layout_width="100dp"
android:layout_height="100dp" />
</LinearLayout>
关于setFixedSize,我的一个问题是函数的参数代表什么单位?整数是点还是像素?我正在阅读文档:
http://developer.android.com/reference/android/view/SurfaceHolder.html
然而,它只是说setFixedSize的参数是整数。我还不知道它在哪里描述了整数可能代表的单位。我是不是想从一个不好的位置设置SurfaceView的大小
还是有其他问题?我正在开发目标API 19,最小API为9
另外,我想我看到了现在正在发生的事情setFixedSize()改变了画布的分辨率,但并没有像我想做的那样改变其在线性布局中的宽度和高度。我已经在后面的代码中得到了屏幕的宽度和高度,我打算做的是更改SurfaceView的宽度和高度,因为它存在于布局中
p.p.S.我原计划在ScrollView中使用SurfaceView,但现在我看到这种方法可能不可行。我从这篇文章中了解到更多:
https://groups.google.com/forum/#!msg/android-developers/zkdnM0G225I/tt_FJGyOkB4J
谢谢您可以重写SurfaceView类的onSizeChanged()函数来获取和设置视图的大小
protected void onSizeChanged (int w, int h, int oldw, int oldh)
当屏幕大小发生变化时,调用该类
我还注意到您的xml代码有:
android:layout_width="100dp"
android:layout_height="100dp"
这可能就是您无法更改大小的原因
作为第二种选择,您可以通过设置布局参数来设置大小(不确定这是否适用于ScrollView):
我在该方法上使用了@Override,并且无论我是否调用setFixedSize(),它都会在构造函数之后被调用。但我仍然无法更改SurfaceView的大小,它被固定在100dp x 100dp。我看到它有一个黑色背景。要查看
setFixedSize()
的实际操作,请参阅Grafika()中的“硬件定标器练习器”活动。快速演示:
android:layout_width="100dp"
android:layout_height="100dp"
@Override
public void surfaceCreated(SurfaceHolder holder) {
android.view.ViewGroup.LayoutParams lp = this.getLayoutParams();
lp.width = 1000; // required width
lp.height = 1000; // required height
this.setLayoutParams(lp);
}