作为MainActivity类布局的一部分,我有一个SurfaceView:
<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>
我为SurfaceView定义了一个框架类(为简单起见,我省略了很多代码)。在surfaceCreated内我尝试了许多不同的方法 设置画布的大小。画布似乎没有从100dp x 100dp改变大小。我所有调用setFixedSize的尝试似乎都没有影响大小:
public class BackgammonBoardView extends SurfaceView implements SurfaceHolder.Callback {
public BackgammonBoardView(Context context, AttributeSet attrs) {
super(context, attrs);
Log.d(TAG,"SurfaceView Constructor.");
//register out interest in hearing about changes to our surface
SurfaceHolder holder = getHolder();
holder.addCallback(this);
}
//The method is firing just fine. I have the surfaceCreated output from Log.d
@Override
public void surfaceCreated(SurfaceHolder arg0) {
//Has no effect on size
//this.getHolder().setFixedSize(500, 500);
//Has no effect on size
//arg0.setFixedSize(500, 500);
//Has no effect on size
//SurfaceHolder holder = getHolder();
//holder.setFixedSize(500, 500);
//Has no effect on size
/*getHolder().setFixedSize(500,
500);*/
//Causes Eclipse to enter Debug mode. It crashes the program
//android.widget.FrameLayout.LayoutParams params = new android.widget.FrameLayout.LayoutParams(500, 500);
//setLayoutParams(params);
thread.start();
Log.d(TAG,"SurfaceView. surfaceCreated.");
}
}
关于setFixedSize的一个问题是函数的参数代表什么单位?是点的点还是像素的int?我正在阅读文档:
http://developer.android.com/reference/android/view/SurfaceHolder.html
然而它只是说setFixedSize的参数是整数。我还没有看到它描述整数可能代表什么单位的地方。我是否可能尝试从错误的位置设置SurfaceView的大小 还是有其他问题?我正在开发目标API 19,最小API为9。
P.S。我想我现在看到的是什么setFixedSize()改变了画布的分辨率,但没有像我想要的那样改变LinearLayout中的宽度和高度。我已经在后面的代码中获得了屏幕宽度和高度,我打算做的是更改SurfaceView中存在的SurfaceView的宽度和高度。
P.P.S。我打算在ScrollView中使用SurfaceView,但我现在正在阅读这种方法可能无法实现。我从这篇文章中发现了更多信息:
https://groups.google.com/forum/#!msg/android-developers/zkdnM0G225I/tt_FJGyOkB4J
谢谢
答案 0 :(得分:6)
您可以覆盖SurfaceView类的onSizeChanged()函数以获取&amp;设置视图的大小。
protected void onSizeChanged (int w, int h, int oldw, int oldh)
当屏幕尺寸发生变化时,会调用此类。
我还注意到你的xml代码有:
android:layout_width="100dp"
android:layout_height="100dp"
这可能是您无法更改大小的原因。
作为第二种选择,您可以通过设置布局参数来设置大小(不确定这是否适用于ScrollView):
@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);
}