免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1897 | 回复: 0
打印 上一主题 下一主题

Javascript 实现Webview截屏 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 02:29 |只看该作者 |倒序浏览
WebView截屏可以直接用webView.capturePicture方法,也可以用javascript代码计算页面实际高度和宽度

package com.sunting;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Bitmap.Config;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;

/**
 *
 *
 * @author sunting Email:ting.sun@renren-inc.com
 */
public class SnapShotActivity extends Activity {

    private int webViewWidth;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout linearLayout = (LinearLayout) LinearLayout.inflate(this,
                R.layout.main, null);
        setContentView(linearLayout);

        Button button = (Button) findViewById(R.id.snapShot);
        final ImageView image = (ImageView) findViewById(R.id.image);

        final WebView webView = new WebView(this);
        linearLayout.addView(webView);
        webView.setLayoutParams(new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.FILL_PARENT, 150));
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setSaveEnabled(true);
        webView.addJavascriptInterface(new JavaScriptInterface(), "HTMLOUT");
        webView.loadUrl("http://www.iteye.com");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                view.loadUrl("javascript:window.HTMLOUT.getContentWidth(document.getElementsByTagName('html')[0].scrollWidth);");
                super.onPageFinished(view, url);
            }
        });

        button.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                // capture webview
                Bitmap bmp = Bitmap.createBitmap(
                        px2dip(SnapShotActivity.this, webViewWidth),
                        webView.getContentHeight(), Config.ARGB_8888);
                webView.draw(new Canvas(bmp));

                image.setBackgroundDrawable(new BitmapDrawable(bmp));
            }
        });
    }

    /**
     * helper method to change px value to dip value
     *
     * @param context
     *                 The Context the program is running in
     * @param pxValue
     *                 The px value
     * @return
     */
    private static int px2dip(Context context, float pxValue) {
        float density = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / density + 0.5f);
    }

    /**
     * helper javascript class to get webViewWidth and set it
     *
     * @author sunting Email:ting.sun@renren-inc.com
     */
    class JavaScriptInterface {
        public void getContentWidth(String value) {
            if (value != null) {
                webViewWidth = Integer.parseInt(value);
            }
        }
    }
    
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP