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;
我在 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;