Android中不同设备上的位图边框显示不同

时间:2014-05-20 20:12:55

标签: android bitmap

您好我正在尝试以编程方式将位图设置为圆形,但我发现在新手机中它不那么圆润然后我在那里安装了相同的APK我在旧手机中看到更多圆角。请参见截图

Sony Z Xperia 4.3

enter image description here

三星Y Dous 2.3

enter image description here

我无法理解为什么它会在另一个设备中显示不同的边框半径,更圆润,更圆润。我知道如何解决这个问题,以便为所有设备做出同样的决定。

代码:

public class RoundedCornersDrawable extends BitmapDrawable {

  private final BitmapShader bitmapShader;
  private final Paint p;
  private final RectF rect;
  private final float borderRadius;

  public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap) {
    super(resources, bitmap);
    bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
    p = getPaint();
    p.setAntiAlias(true);
    p.setShader(bitmapShader);
    final int w = (int) (resources.getDisplayMetrics().widthPixels) - (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 35, resources.getDisplayMetrics());
    final int h = 200;
    rect = new RectF(0, 0, w, h);
    borderRadius = 15;
  }

  @Override
  public void draw(final Canvas canvas) {
    canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
  }
}

提前致谢

1 个答案:

答案 0 :(得分:0)

我猜这与设备的不同屏幕密度有关(屏幕一英寸内有多少像素)。所有设备屏幕上的一个像素大小不同。 Here's有关支持多个屏幕的一些信息。你还应该看一下DisplayMetrics,在那里你可以得到你应该为你的身高和半径计算添加的当前屏幕密度。

或者,您可以使用显示宽度作为高度和半径计算的基础。现在你使用200和15像素的固定量。

这样的事情:

h = w/10;
borderRadius = h / 3;