我正在處理擴展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