我正在处理扩展SurfaceView的幻灯片菜单视图,但是当我尝试更改视图的大小时画布不会更改。为什么编辑LayoutParams尺寸时不具有画布尺寸的效果
调试目的,我改变了看法调用方法的大小:平局功能
public void changeSize() {
width += 10;
getLayoutParams().width = width;
this.setLayoutParams(getLayoutParams());
}
然后我画在画布上的白色和画斜对面的观点红线:
public void draw() throws Exception {
SurfaceHolder surfaceHolder = getHolder();
if (surfaceHolder.getSurface().isValid()) {
Canvas canvas = surfaceHolder.lockCanvas();
Log.i(TAG, "draw > canvas size: " + canvas.getWidth() + " " + canvas.getHeight());
paint.setColor(Color.rgb(255,0,0));
paint.setStrokeWidth(5);
canvas.drawColor(Color.rgb(255, 255, 255));
canvas.drawLine(0, getLayoutParams().height, getLayoutParams().width, 0, paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
我看到的是一个白色的矩形,它有固定的大小和红线的一部分: demo。
另外,当我拨打this.getWidth()
时,宽度不变。 为什么视图大小不变?这与画布没有改变的原因是一样的吗?我能做些什么来解决它?
我在两个地方尝试过:1)在'setLayoutParams(...)'后的'changeSize()'中,以及2)在'draw()'方法中。两者不能像[setSizeFromLayout()](https://developer.android.com/reference/android/view/SurfaceHolder.html#setSizeFromLayout())一样工作,它可以提供与布局相同的大小。 – lvl7
只要[SurfaceHolder#Callback#surfaceCreated(SurfaceHolder)](https://developer.android.com/reference/android/view/SurfaceHolder.Callback.html)被触发,'SurfaceHolder'将被访问。你从那里试过了吗? – azizbekian