안 드 로 이 드 캡 처 두 가지 방법 적용

2298 단어 Android
안 드 로 이 드 애플 리 케 이 션 개발 과정 에서 전체 인터페이스 나 일부분 을 캡 처 해 야 하 는 수요 가 있 을 수 있 습 니 다.Android 에서 View 를 캡 처 하 는 방법 도 여러 가지 가 있 습 니 다.
DrawingCache 사용 하기
  • 뷰 를 직접 호출 합 니 다.draw
  • DrawingCache 방법:
    DrawingCache 를 사용 하면 캡 처 할 View 에 대한 요구 가 있 습 니 다.View 자체 가 인터페이스 에 표시 되 어 있 습 니 다.View 가 인터페이스 에 추가 되 지 않 았 거나 표시 되 지 않 았 다 면 buildDrawingCache 는 실 패 했 습 니 다.이런 방식 은 응용 인터페이스 나 특정한 부분 에 대한 캡 처 에 비교적 적합 하 다.절차 가 간단 하 다.
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();  //  DrawingCache     
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); //    DrawingCache   ,  DrawingCache             
    view.setDrawingCacheEnabled(false);  //  DrawingCahce       

    View.draw 방법:
    캡 처 할 View 가 인터페이스 에 추가 되 지 않 았 다 면 자바 코드 를 통 해 만 들 었 거나 inflate 를 통 해 만 들 었 을 수도 있 습 니 다.이 때 DrawingCache 방법 을 사용 하면 그림 을 가 져 올 수 없습니다.View 가 용기 에 추가 되 기 전 까지 실제 크기 를 얻 지 못 했 기 때문에(LayoutWidth 가 MatchParent 라면 Parent 가 없습니다...)먼저 View 의 크기 를 지정 해 야 합 니 다.
    	private void layoutView(View v, int width, int height) {
    		// validate view.width and view.height
    		v.layout(0, 0, width, height);
    		int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
    		int measuredHeight = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
    		// validate view.measurewidth and view.measureheight
    		v.measure(measuredWidth, measuredHeight);
    		v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());i
    	}

    그 다음 에 View 와 그 내부 의 서브 View 는 모두 실제 크기 를 가지 게 되 었 다.즉,구 조 를 완 성 했 고 인터페이스 에 추 가 된 것 과 비슷 하 다.다음 에 비트 맵 을 만 들 고 그 위 에 그 릴 수 있 습 니 다:
    int viewWidth = webView.getMeasuredWidth();
    int viewHeight = webView.getMeasuredHeight();
    if (viewWidth > 0 && viewHeight > 0) {
    	b = Bitmap.createBitmap(viewWidth, viewHeight, Config.ARGB_8888);
    	Canvas cvs = new Canvas(b);
    	webView.draw(cvs);
    }

    WebView 의 캡 처 는 조금 특수 합 니 다.웹 페이지 의 내용 은 레이아웃 이 완 료 된 후에 바로 렌 더 링 할 수 없습니다.WebView 크기 의 변 화 는 데스크 톱 브 라 우 저 창 크기 의 변화 에 해당 하기 때문에 Webkit 는 창 크기 에 따라 모든 내용 을 다시 렌 더 링 해 야 합 니 다.이것 은 최대 300 ms 의 시간 이 필요 합 니 다(성능 이 다른 장치 에 대해 서 는...웹 페이지 의 복잡 도 는 웹 키 트 버 전과 다 를 수 있 습 니 다).배경 을 만 드 는 WebView 를 캡 처 해 야 한다 면 만 들 때 레이아웃 작업 을 해 야 합 니 다.로 딩 이 완료 되면 대부분 렌 더 링 이 완료 되 었 습 니 다(비동기 적 인 js 처리 가 없 는 한).

    좋은 웹페이지 즐겨찾기