선형 레이아웃 (width = fill parent, 기본적으로 장치의 전체 너비를 채 웁니다.)에는 2 개의 하위 레이아웃이 포함되어 있습니다. 하나의 선형 레이아웃 (width1 = fill_parent)을 사용하고 두 번째 선형은 width = fill_parent 인 webview입니다. 기본적으로 webview는 visibility = GONE으로 정의되므로 화면에 표시되지 않으며 공간을 차지하지 않습니다.안드로이드 createbitmap 너비는 다른 장치에서 다르게 동작합니다.
<ParentLinear> <Linear1 width=fill_parent></Linear1> <Webview width=fill_parent></Webview> </ParentLinear>
는 I, 프로그램은 선형으로 배치 linear1 표면 뷰로드 웹보기 사라 = 공개 남아있다. 표면보기는 모든 장치에서 전화의 전체 너비를 차지하지만 아무런 문제가 없습니다. 이제 일정한 조건에서 프로그램 적으로 linear1 (가시성 = 사라짐)을 숨기고 캔버스를 사용하여 createbitmap/write를 사용하여 새 비트 맵을 작성한 다음 파일로 작성한 다음 webview에로드하고 webview를 표시합니다. 비트 맵에서 장치의 전체 너비를 사용하려면 (더 이상은 아니지만), 내가하는 일은 getwidth를 사용하여 숨기기 전에 linear1의 너비를 찾는 것입니다. 올바른 값을 얻으면 0이 아닙니다. 내가 만드는 비트 맵의 너비로 설정합니다.
비트 맵이 아무런 문제없이 생성되었으므로 파일로 장치에 쓴 다음 파일 시스템에서 webview로로드되고 모든 것이 훌륭합니다. HTC Inspire에서 동작하는 방식을 정확하게 동작합니다 (andriod 2.3 생각 ...). 비트 맵/webview는 장치의 전체 너비를 차지하며 비트 맵의 크기는 linear1의 너비와 동일합니다. 하지만 HTC One MIni (안드로이드 4.2.2)에서이를 테스트 할 때 비트 맵 너비가 장치 너비와 linear1 너비보다 훨씬 큽니다. 원래는 linear1 너비를 사용하여 비트 맵을 만들었지 만 장치의 전체 너비를 차지합니다. 내가 Kindle FIRE (불의 첫 번째 버전)에서 테스트 할 때 비트 맵의 너비가 linear1의 너비보다 작습니다. 기본적으로 HTC Inspire에서는 예상대로 작동하지만 HTC One Mini 및 KIndle Fire에서는 다르게 작동합니다. 나는 다른 장치에서 테스트하지 않았다.
분명히 밝혀야 할 것은 조정할 수있는 webview의 확대/축소를 말하는 것이 아니며 내가 언급 한 문제는 비트 맵의 크기입니다. 이것은 각 장치의 해상도, 핀치 당 픽셀 수 등과 관련이있을 수 있습니다. 그러나 실제로 이해할 수없는 것은 비트 맵의 너비를 설정하기 위해 linear1의 너비를 실제로 사용했기 때문입니다. 그러면 정확히 왜 그렇지 않을까요? 같은. 한 가지 더, 비트 맵에서 getwidth를 수행하면 반환되는 수는 linear1의 수와 동일하지만 화면에서 일치하지 않으면 비트 맵이 눈에 띄게 커지거나 작아집니다. 어떻게 작동하는지 이해할 수있는 조언을 주시면 저에게 알려주세요.
여기 내가 관련 있다고 생각하는 코드의 일부입니다.
int bitmapX = linear1.getWidth() //this is the value under question
int bitmapY = 600; // will need to convert from dip to pixel later
Bitmap myBitMap = Bitmap.createBitmap(bitmapX, bitmapY, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(myBitMap);
-- there is other code which is not shown here to write stuff into the bitmap using canvas --
canvas.save();
canvas.translate(
myBitMap.getWidth()/2 ,
myBitMap.getHeight()/2);
canvas.restore();
writeBitmap(myBitMap); //writes the bitmap to a file calling a user defined function.
myBitMap.recycle();
에 의해 그 금액을 곱하여
보십시오. 코드를 게시하는 것이 좋습니다. 기억하십시오 : "코드가 말보다 더 크게 말합니다" –
그게 내가 생각하는 것입니다. 지금 코드 스 니펫을 추가했습니다. –
WebView 대신 ImageView를 사용할 수 있습니까? 하드 코드 된 600 높이 때문입니다. 나는 당신이'yourWebView.setInitialScale (100);을 시도 할 것을 조언하겠다. –