поместите ваш скрипт в html-файл и поместите их в папку asset
в проекте.
test.html
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.js"></script>
<style type="text/css">
div {
height: 100px;
width: 100px;
background-color: #2C7CC3;
}
</style>
<script>
function callFromActivity(){
html2canvas($("#testdiv"), {
onrendered: function(canvas) {
var myImage = canvas.toDataURL("image/png");
window.android.onData(myImage);
}
});
}
</script>
</head>
<body>
<div id="testdiv">
<input type="text"></input>
<button onclick="callFromActivity();">Click me</button>
</div>
</body>
</html>
создать служебный класс для чтения test.html
из asset
.
ReadAsset.java
public class ReadAsset {
public static String read(String filePath, Context context) throws IOException {
StringBuilder sb = new StringBuilder();
InputStream is = context.getAssets().open(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String str;
while ((str = br.readLine()) != null) {
sb.append(str);
}
br.close();
return sb.toString();
}
}
в вашем макете создайте WebView
.
WebView :
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btn_start">
</WebView>
в своей деятельности создайте interface
, чтобы получить обратный вызов из JavaScript
интерфейс в действии
@JavascriptInterface
public void onData(String value) {
android.util.Log.d("WebView", value);
String html = "<html><body><img src=\"" + value + "\"/></body></html>";
this.runOnUiThread(() ->
webView.loadData(html, "text/html", "UTF-8"));
}
и, наконец, настройте webview
и позвоните callFromActivity()
с кнопки HTML или с кнопки Android
коды деятельности
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
String html = "";
try {
html = ReadAsset.read("test.html", this);
} catch (IOException e) {
e.printStackTrace();
}
webView = findViewById(R.id.web_view);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
android.util.Log.d("WebView", consoleMessage.message());
return true;
}
});
//webView.setWebViewClient(new WebViewClient());
webView.clearCache(true);
webView.clearHistory();
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.addJavascriptInterface(this, "android");
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDefaultTextEncodingName("utf-8");
webView.getSettings().setPluginState(WebSettings.PluginState.ON);
webView.loadData(html, "text/html", "UTF-8");
findViewById(R.id.btn_start).setOnClickListener(v -> start());
}
void start() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("callFromActivity();", null);
} else {
webView.loadUrl("javascript:callFromActivity();");
}
}
что произойдет, если вы сделаете снимок экрана и загрузите его снова в webview
, но у вас будут данные base64
в действии, чтобы вы могли делать с ним все, что захотите, или вы можете использовать javascript
и использовать изображение там .