2

Canvas で WebView を描画する必要があります。私は今、2日間答えを探していますが、私が必要とするものを見つけることができません.

現時点では、このように WebView を表示できます

WebView wv = new WebView(this);
String htmlContent = foo_getHtmlContent();
wv.loadData(htmlContent, "text/html", "UTF-8");
setContentView(wv);

これはかなりうまく機能しますが、ビューを pos 0,0 から開始します。また、このような Canvas を使用して (XML から膨張した) ビューを描画することもできます

LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.layout_test, null);
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);

これはまさに私が描きたい方法ですが、ビューが間違っています。これらの 2 つの方法を組み合わせて、最初のコードから 2 番目のコードの方法 (または同様の方法) でビューを描画する方法が見つかりません。

Canvas で WebView を描画する方法を知っている人はいますか?

編集:
誰も何も考えていませんか?
これを試してみましたが、属性がないために NullPointerException が発生します。

LayoutInflater li =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
WebView wv = null;
try
{
    wv = (WebView) li.createView("WebView", "android.webkit.", null);
    wv.loadData(htmlContent, "text/html", "UTF-8");

    wv.measure(MeasureSpec.getSize(wv.getMeasuredWidth()),MeasureSpec.getSize(wv.getMeasuredHeight()));
    wv.layout(100, 100, 400, 400);

    canvas.translate(100, 100);
    wv.draw(canvas);
}catch (InflateException e)
{
    Log.e("Meassure", "InflateException: " + e);
} catch (ClassNotFoundException e)
{
    Log.e("Meassure", "ClassNotFoundException: " + e);
}

フィッティング属性を作成する方法を知っている人はいますか?

EDIT2:
また私。
私は何か他のことを試してみましたが、TextView では機能するが Web ビューでは機能しない方法を見つけました。これ

LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.layout_test, null);
TextView textView = (TextView) v.findViewById(R.id.textView1);
textView.setText("Hello World");
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);

かなりうまく動作し、TextView が行うべきことはすべて行いますが、これは

View v = li.inflate(R.layout.web_layout, null);
WebView wv = (WebView) v.findViewById(R.id.webView);
wv.loadData(htmlContent, "text/html", "UTF-8");
v.measure(MeasureSpec.getSize(v.getMeasuredWidth()), MeasureSpec.getSize(v.getMeasuredHeight()));
v.layout(400, 400, 400, 400);
canvas.translate(100, 100);
v.draw(canvas);//if i substitute this line by setContentView(v); it works but without positioning

絶対に何もしません(LogCatに面白いものを投げることを除いて)。
LogCat 出力は次のとおりです (約 10 ミリ秒ごとに繰り返されます)。

06-17 14:04:06.210: D/webview(19424): [InitTabEffectPivot] >> nScreenWidth = 720
06-17 14:04:06.210: D/webview(19424): [InitTabEffectPivot] >> nScreenHeight = 1280
06-17 14:04:06.220: D/skia(19424): notifyPluginsOnFrameLoad not postponed

また、行 wv.loadData の後に Thread.sleep(10) を呼び出そうとしました。WebView がコンテンツをロードするのに時間がかかることをどこかで読んだことがありますが、これも機能しません。少なくとも logcat-output の意味を知っている人はいますか?

4

1 に答える 1