在画布上绘制位图得到了缩放

时间:2011-02-16 09:49:26

标签: android canvas view

我使用两个位图创建了一个自定义视图。当我在View中使用Bitmap时,在ImageView中,图像就可以了。我必须拨打setDensity(240)(hdpi设备),但没关系。 但是,在自定义视图中,当我在画布上绘制相同的位图时,在onDraw(Canvas)重写方法中,它会再次缩放,就像我不调用setDensity(240)时一样。 通过调试,我确保在调用后画布和位图的密度为240。

代码:

@Override
protected void onDraw(Canvas canvas) {    
    _ingredient.setDensity(240);
    canvas.setDensity(240);
    canvas.drawBitmap(_ingredient, new Matrix(), new Paint());
    Matrix refMatrix = new Matrix();
    refMatrix.postTranslate(0, _ingredient.getHeight()-35);
    Paint paint = new Paint();
    paint.setAlpha(60);
}

在我的View之外工作的ImageView。

Bitmap tertr = _cocktail.getCocktailBitmapImage();
tertr.setDensity(240);
ImageView in = new ImageView(this);
in.setScaleType(ScaleType.CENTER);
in.setImageBitmap(tertr);
RelativeLayout relativeLayout = RelativeLayout)findViewById(R.id.cocktail_date_image_layout);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
relativeLayout.addView(in, params);

第一个是显示放大的图像,就像第二个一样,没有setDensity调用。图像是在72dpi创建的。给出了这些图像,我无法改变它们。我错过了一件事,或者这就是Canvas的工作方式?用于测试的设备是DROID2。

2 个答案:

答案 0 :(得分:3)

我解决了这个问题。导致问题的代码段位于清单文件中。 我们将<supports-screens android:anyDensity="false"/>更改为true。 True是默认值,但不幸的是,当我尝试不同的方法时,我改变了它。使用新值和setDensity()方法,它可以正常工作。

答案 1 :(得分:1)

位图密度不是它将被绘制的屏幕密度,而是位图的“原始”密度。这意味着如果位图和屏幕密度匹配,位图将不会缩放。如果希望图像在凹陷中的大小与像素一样大,则应将位图密度设置为160。希望这会有所帮助。

另外我认为你不应该修改画布密度。