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()
으로 전화 할 때 너비가 변경되지 않습니다. 왜보기 크기가 변경되지 않습니까? 캔버스가 변하지 않는 것과 같은 이유입니까? 문제를 해결하려면 어떻게해야합니까?
이전에'setLayoutParams (...) '다음에'changeSize()'와'draw()'메서드에서 2) 두 곳에서 시도해 보았습니다. 레이아웃과 같은 크기를 제공 할 수있는 [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