我想得到我的可绘制的内在宽度和高度。
它在160 dpi的屏幕下运行良好,但是当我以120 dpi的速度运行模拟器时,它返回的小值超过160 dpi。
那么如何获得与160 dpi屏幕相同的正确值?
这是在Drawable对象中初始化我的图像的代码:
Drawable d = getResources().getDrawable(mBitmapIds[index]);
提前感谢。
修改添加样本:
这是160 dpi中的正确值>高度= 726宽度= 602
这是120 dpi中的错误值>>高度= 545宽度= 452
如何使120 dpi与内部宽度和高度的160 dpi相同?
答案 0 :(得分:0)
如果宽度为100,请使用:
100 px
而不是:
100 dpi
这样android不会应用dpi单位的缩放因子,并且尺寸在任何屏幕都是相同的......
答案 1 :(得分:0)
假设您的图片尺寸为width
和length
。
我建议您在自定义视图中绘制页面和突出显示,覆盖onDraw(Canvas)
,如下所示:
class PageHilghlighter extends View {
@Override
protected void onDraw(Canvas canvas) {
// The Canvas you receive is automatically clipped so that its clip bounds reflect the space dedicated to your view
Rect bounds = canvas.getClipBounds();
Drawable myPage = getCurrentPage(); // To implement
int saveCount = canvas.save();
// Scale the canvas so that your page fills your view
canvas.scale(myPage.getIntrisicWidth() / bounds.width(), myPage.getIntrisicHeight() / bounds.height());
myPage.draw(canvas);
float x = getLineX(); // To implement
float y = getLineY(); // To implement
canvas.drawRect(x, y, x + myLineWidth(), y + myLineHeight(), myPaint); // Use some transparent paint ...
canvas.restore(saveCount);
}
}
这样的事情应该有用。我没有测试过它。
答案 2 :(得分:0)
这是获得正确的内在宽度和高度的解决方案:
Bitmap pageBitmap = BitmapFactory.decodeResource(getResources(), mBitmapIds[index]);
DisplayMetrics dm = getResources().getDisplayMetrics();
if (dm.densityDpi == 120) {
pageBitmap.setDensity(90);
} else if (dm.densityDpi == 120) {
pageBitmap.setDensity(160);
} else if (dm.densityDpi == 240) {
pageBitmap.setDensity(360);
} else if (dm.densityDpi == 320) {
pageBitmap.setDensity(640);
}
Drawable d = new BitmapDrawable(getResources(), pageBitmap);