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 の意味を知っている人はいますか?