Canvas onDraw 之外的高度

Canvas height outside onDraw

我在 canvas 上绘制图像,它又在全屏模式下绘制在导航栏和状态栏后面。

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.background_try9);
    bgTrans = Bitmap.createScaledBitmap(b, canvas.getWidth(), canvas.getHeight(), false);

    canvas.drawBitmap(bgTrans, 0, 0, paint);
}

现在我想把它移到 onDraw 方法之外。

我知道我可以像这样使用 DisplayMetrics

DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;

但我读到有时它可以报告 wrong/null 值。同样在检查之后,似乎 heightPixels 不计算导航栏高度。有没有办法在输入 onDraw 之前获得 canvas 尺寸?

获取导航栏的高度并从屏幕高度中减去它!

试试下面的代码:

Resources resources = context.getResources();

int navBarId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int statusBarId = resources.getIdentifier("status_bar_height", "dimen", "android");

int navBarHeight = 0;
int statusBarHeight = 0;

if (resourceId > 0) {
    navBarHeight = resources.getDimensionPixelSize(navBarId);
    statusBarHeight = resources.getDimensionPixelSize(statusBarId);
}

DisplayMetrics displayMetrics = resources.getDisplayMetrics();
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;

height = height + navBarHeight + statusBarHeight;

此代码未经测试,但我认为它可以工作!我记得遇到过这个问题,我使用了这种方法。

另一种获取屏幕尺寸的方法是:

// Inside an Activity or if you have a reference of activity
Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y;