В документации говорится о Canvas.getHeight():
Возвращает высоту текущего слоя чертежа
Это так же важно для API < 16?
Пример:
import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
class MyView extends View {
Rect r = new Rect();
public MyView(Context context) {
super(context);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(20, 40);
params.leftMargin = 50;
params.topMargin = 50;
setLayoutParams(params);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.rgb(255, 0, 0));
Log.d("me", "canvas.getHeight = " + canvas.getHeight());
Log.d("me", "canvas.getWidth = " + canvas.getWidth());
canvas.getClipBounds(r);
Log.d("me", ".getClipBounds.height() = " + r.height());
Log.d("me", ".getClipBounds.widht() = " + r.width());
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout container = new FrameLayout(this);
container.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
container.addView(new MyView(this));
setContentView(container);
}
}
API >= 16:
Если я использую эмулятор Galaxy Nexus с API 16 или выше canvas.getHeight() возвращает 40, как и ожидалось:
D/me﹕ canvas.getHeight = 40
D/me﹕ canvas.getWidth = 20
D/me﹕ .getClipBounds.height() = 40
D/me﹕ .getClipBounds.widht() = 20
API < 16:
Но если я использую эмулятор Galaxy Nexus с API 15 или ниже (также попробовал это с реальным устройством и API 7):
D/me﹕ canvas.getHeight = 1280
D/me﹕ canvas.getWidth = 720
D/me﹕ .getClipBounds.height() = 40
D/me﹕ .getClipBounds.widht() = 20
Вопрос:
Почему результаты разные? Я не мог найти подсказки в документации.