android webpage capture (url 캡쳐하기)


webview를 이용한 캡쳐 방법입니다.

출처 : http://zettystory.tistory.com/entry/Webpage-%EC%8A%A4%ED%81%AC%EB%A6%B0-%EC%BA%A1%EC%B3%90%ED%95%B4-Bmp%EB%A1%9C-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0


캡쳐 방법 :

webView.setWebChromeClient(new MyWebChromeClient());

.....
/*webViewClient 에 onPageFinished 이벤트가 있지만 테스트해 본 결과 웹페이지가
   완전히 로드되지 않았는데도 이벤트가 발생한다.  그래서 아래와 같은 방법으로 웹페이지가
  완전히 로드되면 캡쳐를 한다.  그렇치 않으면 완전하 스크린샷을 얻을 수 없다.
*/

public class MyWebChromeClient extends WebChromeClient{
  
  @Override
  public void onProgressChanged(WebView view, int newProgress) {
   super.onProgressChanged(view, newProgress);
   progressbar.setProgress(newProgress);    
   
   if (newProgress == 100){          
    //screen capture
    String url = view.getUrl();        
    Uri uri = Uri.parse(url);
    String host = uri.getHost();
    String fileName =  APP_HOME + "/" + host + ".png";
    
    File f = new File(fileName);
    
    if (f.exists()) return ;
    
    Picture pic = view.capturePicture();   
    
    saveScreenshot(pic, fileName);
   }
  }  
 } 

private void saveScreenshot(final Picture pic, final String fileName){
  new Thread(new Runnable() {   
   @Override
   public void run() {
    
    Bitmap bmp = Bitmap.createBitmap(200,200, Bitmap.Config.ARGB_8888);
    Bitmap roundBmp = Bitmap.createBitmap(200,200, Bitmap.Config.ARGB_8888);
    
    Canvas canvas = new Canvas(bmp);
    pic.draw(canvas);

    Canvas rCanvas = new Canvas(roundBmp);   
       
    //for round image
    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0,0,200, 200);  
    final RectF rectF = new RectF(rect);
    final float roundPx = 20;
    
    paint.setAntiAlias(true);
    paint.setColor(color);
    rCanvas.drawARGB(0,0,0,0);
    rCanvas .drawRoundRect(rectF, roundPx, roundPx, paint);
    
    paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN));
    rCanvas .drawBitmap(bmp, rect, rect, paint); 
    
    try {
     FileOutputStream output = new FileOutputStream(fileName);
     
     roundBmp.compress(Bitmap.CompressFormat.PNG, 90, output);
     
     output.flush();
     output.close();
     //     Images.Media.insertImage(getContentResolver(), bmp, fileName, null);
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();  
    }
   }
  }).start();  
 } 


댓글

이 블로그의 인기 게시물

nightwish - elan 가사 & 해석

안드로이드에서 트위터 연동하기 (web, twitter4j)