我有一個按鈕,圖像和web視圖的活動。 我的目標是加載一個頁面,然後對其執行JavaScript以使用HTML5等繪製圖形。將Android webview渲染爲位圖,html5 javascript,回調問題
由html5繪製的圖像的高度未知/變量,但寬度應始終與手機的寬度相同寬度/或瀏覽器窗口。
我有一個JavaScript接口來獲得一個回調,包含它現在已完成調用繪圖功能的信息,它給了我身高。
這裏是網頁視圖
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);
}
這可行。按下按鈕,將繪製的內容呈現給紋理,並且圖像視圖具有正確的結果。唯一的cavaet是我必須等到頁面已經加載/繪製之前按下按鈕。現在
,我已經實現了我的回調從JavaScript得到這樣的:
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);
}
});
}
}
而每一次,這個回調函數呈現一個白色的頁面。有趣的是,如果我在看到這個回調被調用後立即按下了渲染到紋理按鈕,它就會顯示預期的結果。是否runOnUiThread失敗了?
睡眠是我添加的東西,看看是否有某種有趣的延遲的Web視圖渲染和我從JavaScript獲得的回調。
我也嘗試將睡眠移入runOnUiThread,這也沒有幫助。
我希望有人知道我應該尋找什麼方向來解決這個問題。任何幫助表示讚賞。