绘制位图时忽略setDensity / setTargetDensity

时间:2011-12-21 11:33:25

标签: android bitmap

我有一个Bitmap,我试图将它用作我窗口的平铺背景。问题是规模是错误的。我想让位图在屏幕上绘制两倍大。我尝试同时使用Bitmap.setDensityBitmapDrawable.setTargetDensity,但都没有效果。

我的代码:

Bitmap bitmap = fromSomewhere();
int original_density = bitmap.getDensity(); // this returns 240
// bitmap.setDensity(..); // has no effect, tried with 120,160,480
BitmapDrawable drawable = new BitmapDrawable(bitmap);
// drawable.setTargetDensity(..); // has no effect, tried with 120,160,480
drawable.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
getWindow().setBackgroundDrawable(drawable);

注意:

  • 我的目标SDK是8,我还尝试在清单中专门设置<supports-screens android:anyDensity="true"/>
  • 给出了Bitmap对象,我无法控制它是如何生成的,我只能对它进行操作。
  • 我的测试设备是三星Galaxy 2(高密度),虽然我也在中等密度的仿真器上进行了测试,但仍然没有看到效果。
  • 我没有改变任何其他密度,特别是getWindow()

密度不是实现x2缩放的最简单方法吗?为什么没有工作?\

1 个答案:

答案 0 :(得分:0)

不确定这是Android错误还是设计错误。对此挣扎然后最终得到以下解决方法。我们的想法是你然后应用矩阵变换来计算像素密度。 view是您的ImageView

view.setScaleType(ImageView.ScaleType.MATRIX);

Matrix matrix = new Matrix();
float scaleFactor = view.getContext().getResources().getDisplayMetrics().density;
matrix.setScale(scaleFactor,scaleFactor);
view.setImageMatrix(matrix);

BitmapDrawable bitmapDrawable = new BitmapDrawable(view.getContext().getResources(), bitmap);
bitmapDrawable.setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);

view.setImageDrawable(bitmapDrawable);