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();
}
댓글
댓글 쓰기