私は、ボタンと画像、およびWebビューでアクティビティを持っています。 私の目標は、ページをロードし、HTML5などを使ってグラフィックスを描くためにJavaScriptを実行することです。Android webviewをビットマップにレンダリング、html5 javascript、コールバックの問題
html5で描画される画像の高さは不明ですが、変数は常に携帯電話のものと同じである必要があります幅/ブラウザウインドウ。
私はjavascriptインターフェイスを使用して、描画関数の呼び出しを終了したことを示す情報を含むコールバックを取得しています。ここで
は、WebViewの
mWeb = (WebView) findViewById(R.id.webView1);
mWeb.clearCache(true);
mWeb.addJavascriptInterface(new IJavascriptHandler(), "cpjs");
mWeb.getSettings().setJavaScriptEnabled(true);
mWeb.loadUrl(" http://theURL.com ");
mWeb.setInitialScale(100);
mWeb.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
mWeb.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url){
mWidth = mWeb.getWidth();
mHeight = mWeb.getHeight();
view.loadUrl("javascript: Tools.adjustWidth(" + mWidth + ")");
String javaCouponRender = "renderCoupon(" + kupongJson + ", 0); void(0)";
view.loadUrl("javascript: " + javaCouponRender);
}
});
}
そして、私は私の見解を持っているボタンの設定ですが、私はこの機能をテクスチャに私のWebViewをレンダリング開始するために使用している:
void renderCoupon(int width,int height){
bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas c =new Canvas(bitmap);
mWeb.draw(c);
imgView.setMinimumWidth(width);
imgView.setMinimumHeight(height);
imgView.setImageBitmap(bitmap);
imgView.setVisibility(View.VISIBLE);
}
これは動作します。ボタンを押すと、描画されたコンテンツがテクスチャにレンダリングされ、イメージビューに正しい結果が得られます。唯一のカバエは、ボタンを押す前にページが読み込まれるまで待たなければなりません。
final class IJavascriptHandler {
IJavascriptHandler() {
}
public void couponRenderedCallback(final int height){
mHasGotRenderCallback = true;
mHeight = height;
Toast t = Toast.makeText(getApplicationContext(), "see if it helps sleeping", 2000);
t.show();
try{
Thread.sleep(5000);
}
catch(InterruptedException ex){
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast t2 = Toast.makeText(getApplicationContext(), "and now we render to texture", 2000);
t2.show();
renderCoupon(mWidth, mHeight);
}
});
}
}
たびは、このコールバック関数は白ページをレンダリング:
今、私はこのようにJavaScriptから取得するコールバックを実装しています。面白いことに、このコールバックが呼び出されるとすぐにrender-to-textureボタンを物理的に押すと、期待される結果が表示されます。それは何とか失敗しているrunOnUiThreadですか?
睡眠は私がwebviewのレンダリングとJavaScriptから得られるコールバックの面白い遅れがあるかどうか確認するために追加したものです。
私もrunOnUiThreadにスリープ状態を移行しようとしましたが、これもまた役に立ちませんでした。
誰かがこの問題を解決するためにどの方向に向いているかを知っていれば幸いです。どんな助けもありがとうございます。