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

Android 为什么画布中的位图位于错误的位置?,android,canvas,bitmap,Android,Canvas,Bitmap,我用loadBitmap函数用canvas得到位图,但是位图里面的位置不对,我想了很久,却找不到原因。点由layout.xml中的layout_marignLeft和layout_marinTop在dp中设置。 这是代码 public Bitmap loadBitmap() { Bitmap b = BitmapFactory.decodeResource(mContext.getResources(),bg) .copy(Bitmap.Config.ARGB

我用loadBitmap函数用canvas得到位图,但是位图里面的位置不对,我想了很久,却找不到原因。点由layout.xml中的layout_marignLeft和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;

}
公共位图加载位图(){
位图b=BitmapFactory.decodeResource(mContext.getResources(),bg)
.copy(Bitmap.Config.ARGB_8888,true);
如果(null==ids | | null==points | | ids.size()!=points.size())
返回b;
画布c=新画布(b);
对于(int i=0;i
是您正在使用的带有填充的图像。如果图像有一些额外的alpha边界,那么您的计算可能会出错。

问题与视图和画布无关,我想让应用程序全屏显示,但平板电脑有导航栏,这导致布局无法填充屏幕,边距左和边距右的参数完全错误。当我隐藏导航栏时,一切正常。以下是隐藏导航栏的方法。

Integer正常。这里的问题是位图不在正确的位置。因此,x和y是从画布的左上角计算的x和y是框架布局,框架布局包括一些IAMGEEVIEWS,x是布局_marginLeft,y是布局_marginTop。我只想将ImageView中的位图组合成一个大位图。在ImageView中,为什么不直接设置ImageView?我的应用程序是全屏的,没有填充,x和y与ImgeView的边距相同,布局视图很好,但我绘制的位图似乎不正确。更重要的是,位图似乎比真实的小。