Android WebView 캡 처 기능 구현
먼저 핸드폰 자체 의 긴 캡 처 기능 을 살 펴 보 자. 기종:vivo x9 plus
대담 하 게 추측 하여 논 리 를 실현 하 다.
1:스크롤 가능 한 View 가 필요 합 니 다.
2:화면 에 보 이 는 View 내용 캡 처
3:View 를 계속 스크롤 하고 View 가 렌 더 링 한 내용 을 캡 처 하여 용기 에 저장 합 니 다.
4:용기 에 있 는 그림 을 순서대로 조립 합 니 다.
5.저장
우리 가 추측 하 는 논리 에 따라 한 걸음 한 걸음 실현 된다.
1.WebView 컨트롤 을 소개 대상 으로 합 니 다.
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.View 렌 더 링 내용 가 져 오기
//1:
view.setDrawingCacheEnabled(true);
//2:
Bitmap drawingCache = view.getDrawingCache();
//3: ( )
Bitmap newBitmap = Bitmap.createBitmap(drawingCache);
//4:
view.setDrawingCacheEnabled(false);
3.View 를 계속 스크롤 하고 View 가 렌 더 링 한 내용 을 캡 처 하여 용기 에 저장 합 니 다.굴 리 는 법
// View
webView.setScrollY();
webView.scrollTo();
webView.scrollBy();
매번 몇 거 리 를 굴 립 니까?만약 에 우리 의 WebView 가 화면 을 가득 채 웠 다 고 가정 하면 getDrawingCache()방법 을 통 해 WebView 가 화면 에 보 여 주 는 내용 을 가 져 오 는 것 입 니 다.그러면 WebView 컨트롤 의 높이 는 우리 가 구 를 때마다 거 리 를 두 는 것 입 니 다.
몇 번 굴 러 요?
스크롤 횟수=WebView 콘 텐 츠 의 높이/WebView 컨트롤 의 높이+1(나머지 가 있 는 경우 1 회 더 스크롤)
가설:내용 높이 는 3840 이 고 컨트롤 높이 는 1920 이다.그러면 우 리 는 두 번,두 번 캡 처 만 하면 된다.
내용 높이 는 4000 이 고 컨트롤 높이 는 1920 이 며 160 높이 가 캡 처 되 지 않 습 니 다.캡 처 3 회 가 필요 합 니 다.모든 스크롤 횟수 는+1 이 필요 합 니 다.
핵심 코드:
//1:
mWebView.measure(0, 0);
//2: == Webview
int contentHeight = mWebView.getMeasuredHeight();
//3: Webview
int height = mWebView.getHeight();
//4:
int totalScrollCount = contentHeight / height;
//5:
int surplusScrollHeight = contentHeight - (totalScrollCount * height);
//
List<Bitmap> cacheBitmaps = new ArrayList<>();
for (int i = 0; i < totalScrollCount; i++) {
if (i > 0) {
// WebView
mWebView.setScrollY(i * height);
}
// , 1 ,
Bitmap bitmap = getScreenshot(mWebView);
cacheBitmaps.add(bitmap);
}
// , 1
if (surplusScrollHeight > 0) {
mWebView.setScrollY(contentHeight);
Bitmap bitmap = getScreenshot(mWebView);
cacheBitmaps.add(bitmap);
}
4.조립 사진안 타 깝 게 도 구 글 은 사진 을 조립 하 는 api 를 제공 하지 않 았 습 니 다.모든 것 은 우리 가 직접 그 려 야 합 니 다.
what? 자기 그림?
맞아요.자기가 그린 거 예요.안 드 로 이 드 에서 그림 을 그 리 는 거 예요.현실 세계 의 그림 그 리 는 절차 와 똑 같 아 요.똑 같이 종이,화판,붓 을 먼저 준비 해 야 해 요.
핵심 코드:
public Bitmap mergeBitmap(List<Bitmap> datas) {
// ( , )
int bitmapWidth = datas.get(0).getWidth();
// = WebView
int bitmapHeight = contentHeight;
//1:
Bitmap bimap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.RGB_565);
//2: ,
Canvas canvas = new Canvas(bimap);
//3:
Paint paint = new Paint();
for (int count = datas.size(), i = 0; i < count; i++) {
Bitmap data = datas.get(i);
float left = 0;
float top = i * data.getHeight();
Rect src = null;
RectF des = null;
/**
* Rect src = new Rect();
* RectF des = new RectF(); Canvas ( )
*/
if (i == count - 1 && surplusScrollHeight > 0) {
int srcRectTop = data.getHeight() - surplusScrollHeight;
src = new Rect(0, srcRectTop, data.getWidth(), data.getHeight());
des = new RectF(left, top, data.getWidth(), top + surplusScrollHeight);
} else {
src = new Rect(0, 0, data.getWidth(), data.getHeight());
des = new RectF(left, top, data.getWidth(), top + data.getHeight());
}
//
canvas.drawBitmap(data, src, des, paint);
}
return bimap;
}
canvas.drawBitmap()두 Rect 에 대한 개인 적 인 이해:src:그림 의 크기 를 표시 하 시 겠 습 니까?전부 표시 하 시 겠 습 니까?반 만 표시 하 시 겠 습 니까?
그림 을 예 로 들 면:
new Rect(0,0,bitmap.getWidth()/2,bitmap.getHeight()) 그림 너비 반 크기 보이 기
new Rect(0,0,bitmap.getWidth()/2,bitmap.getHeight()/2)는 1/4 의 그림 크기 를 표시 합 니 다.
des:src 그림 을 어느 위치 에 표시 할 지,왼쪽,오른쪽,가운데 에 표시 할 지 대표 합 니 다.
그림 을 예 로 들 면(도면 은 Canvas,그림 은 Bitmap):
new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()왼쪽 상단 표시
new Rect(0,도면 높이/2,bitmap.getWidth(),bitmap.getHeight()가운데 표시
5.저장
로 컬 에 저장,통과 가능 bimap.copress()방법
데모 데모:
Github 주소: ScreenshotExample 부족 한 점:
WebView 내용 이 너무 길 어 서 는 안 됩 니 다.그렇지 않 으 면 그림 이 너무 많아 서 합 쳐 지면 메모리 가 넘 칠 위험 이 있 습 니 다.
WebView 의 html 에는 떠 있 는 태그 가 있 지 않 습 니 다.그렇지 않 으 면 캡 처 할 때마다 태그 의 내용 을 캡 처 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.