我從ImageView的派生類:自定義視圖的OnDraw接收不同尺寸的畫布
public class TouchView extends ImageView
{
@Override
protected void onDraw(Canvas canvas)
...
的TouchView中在活動的onCreate創建一次,並用來自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,其中在畫布變化的寬度和高度的來回(奇怪在我的圖紙中引入錯誤的東西)。我很尷尬。
對於相同的視圖/ drawable,canvas應該總是具有相同的大小嗎?該文檔說getWidth和getHeight方法返回當前圖形的尺寸圖層,但是不清楚該圖層是什麼,爲「幕後」畫布創建了多少圖層以及如何控制此過程。
我很感激任何解釋如何獲得一致的繪圖行爲,特別是通過獲取在onDraw
上繪製的視圖的實際大小。
目前我使用的是該視圖的getDrawingRect呼叫的workround,但我不知道這是一個正確的方法,因爲它似乎的onDraw
的canvas
參數應該是完全充足的繪製尺寸。