ImageView から派生したクラスがあります。
public class TouchView extends ImageView
{
@Override
protected void onDraw(Canvas canvas)
...
touchview は、アクティビティの onCreate で 1 回だけ作成され、SVG ファイルからドローアブルが取り込まれます。
ImageView imageView = new TouchView(this);
imageView.setScaleType(ImageView.ScaleType.MATRIX);
FrameLayout f = (FrameLayout)findViewById(R.id.frame2);
FrameLayout.LayoutParams l = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT, FrameLayout.LayoutParams.FILL_PARENT);
f.addView(imageView, l);
...
is = openFileInput(svgname);
svg = SVGParser.getSVGFromInputStream(is);
is.close();
Drawable d = svg.createPictureDrawable();
imageView.setImageDrawable(d);
すべての環境は常に同じままです。それでも onDraw メソッドでは、イベント間でサイズが異なるキャンバスを取得しています。それはコードです:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Log.v("DRAW", " w= " + canvas.getWidth() + " h=" + canvas.getHeight());
...
}
キャンバスの幅と高さが通常の 1024*728 (これはタブレットでの正しい表示寸法) から 200*160 (私の図面にバグを導入する奇妙なこと) に前後に変化する、線のあるログを生成します。私は恥ずかしい。
キャンバスは、同じビュー/ドローアブルに対して常に同じサイズにする必要がありますか? ドキュメントには、 getWidth および getHeight メソッドが現在の描画レイヤーの寸法を返すと記載されていますが、レイヤーとは何か、「舞台裏」でキャンバス用に作成されるレイヤーの数、およびこのプロセスを制御する方法は明確ではありません。
具体的には、描画されているビューの実際のサイズを取得することにより、一貫した描画動作を取得する方法についての説明をいただければ幸いonDraw
です。
現在、ビューの getDrawingRect を呼び出す回避策を使用していますが、適切な方法かどうかはわかりません。描画のサイズ変更には のcanvas
パラメーターで十分であるように思われるからです。onDraw