为什么画布中的位图错误?

时间:2016-01-30 10:16:37

标签: android canvas bitmap

我使用函数loadBitmap来获取带有canvas的位图,但是里面位图的位置是错误的,我已经想了很久,但是找不到原因。 points由layout_marignLeft和layout.xml中的layout_marinTop在dp中设置。 这是代码。

 public Bitmap loadBitmap() {

    Bitmap b = BitmapFactory.decodeResource(mContext.getResources(),bg)
            .copy(Bitmap.Config.ARGB_8888, true);

    if (null == ids ||null ==  points || ids.size() != points.size())
        return b;

    Canvas c = new Canvas(b);

    for (int i = 0; i < ids.size(); i++) {
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), ids.get(i));
        c.drawBitmap(bitmap, dpToPx(points.get(i).x), dpToPx(points.get(i).y), null);
        bitmap.recycle();
    }

    c.save(Canvas.ALL_SAVE_FLAG);
    c.restore();
    return b;
}

public float dpToPx(float x) {
    return mContext.getResources().getDisplayMetrics().density * x;

}

2 个答案:

答案 0 :(得分:0)

是您正在使用填充的图像。如果图像有一些额外的alpha边界,那么你的计算可能会出错。

答案 1 :(得分:0)

问题与View和Canvas无关,我希望应用程序全屏,但平板电脑有导航栏,导致布局没有填满屏幕,margin_left和margin_right的参数完全错误。当我隐藏了导航栏,一切正常。这是隐藏导航栏的方法。Android tablet navigation bar won't hide