1

我有一个线性布局(宽度 = 填充父级,基本上它填充了设备的整个宽度),它包含 2 个子布局。一个宽度=fill_parent 的线性布局(我们称之为linear1),第二个是宽度=fill_parent 的webview。默认情况下,webview 定义为 visibility=GONE,因此它不会显示在屏幕上,也不占用任何空间。

<ParentLinear> <Linear1 width=fill_parent></Linear1> <Webview width=fill_parent></Webview> </ParentLinear>

我以编程方式将表面视图加载到线性布局linear1中,并且webview保持可见性=消失。表面视图在所有设备上占据了手机的整个宽度,没有问题。现在在某些条件下,我以编程方式隐藏 linear1 (visibility=gone),并使用 createbitmap 创建一个新位图/使用画布写入,将其写入文件,然后将其加载到 webview 并使 webview 可见。为了使位图仅使用设备的整个宽度,而不是更多,而不是更少,我所做的是在使用 getwidth 隐藏它之前找到 linear1 的宽度(并且我得到正确的值,它不是 0)然后我将其设置为我正在创建的位图的宽度。

现在位图创建没有问题,我将它作为文件写入设备,然后从文件系统加载到 webview 中,一切都很好。它的行为正是我希望它在 HTC Inspire 上的行为(我认为是安卓 2.3..),位图/webview 占据了设备的整个宽度,位图的大小与线性 1 的宽度完全相同。但是当我在 HTC One MIni (android 4.2.2) 上测试时,位图的宽度远大于设备的宽度和线性 1 的宽度,尽管我最初使用线性 1 的宽度创建位图,即占据设备的整个宽度。当我在 Kindle FIre(kindle fire 的第一个版本)上对其进行测试时,位图的宽度小于 linear1 的宽度。基本上可以在 HTC Inspire 上按预期工作,但在 HTC One Mini 和 KIndle Fire 上有所不同。我没有在任何其他设备上测试过。

为了清楚起见,我不是指我知道可以调整的 webview 的缩放,我指的问题是位图的大小。这可能与每个设备的分辨率、每个夹点的像素等有关,但我不明白的是,因为我实际上使用了 linear1 的宽度来设置位图的宽度,那为什么不完全是相同的。还有一件事,如果我在位图上做一个getwidth,我得到的数字与linear1的数字相同,但在屏幕上它们不匹配,位图明显更大或更小。请让我知道您是否可以给我一些指示以了解其工作原理。

这是我认为相关的代码部分。

    int bitmapX =  linear1.getWidth() //this is the value under question
    int bitmapY =  600; // will need to convert from dip to pixel later
    Bitmap myBitMap = Bitmap.createBitmap(bitmapX, bitmapY, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(myBitMap);

-- there is other code which is not shown here to write stuff into the bitmap using canvas -- 

    canvas.save();
    canvas.translate(
    myBitMap.getWidth() / 2 ,
    myBitMap.getHeight() / 2);
    canvas.restore();
    writeBitmap(myBitMap); //writes the bitmap to a file calling a user defined function.
    myBitMap.recycle();
4

1 回答 1

2

我认为您必须将这些数量乘以设备密度。

尝试将这些金额乘以

this.getResources().getDisplayMetrics().density
于 2013-10-18T17:26:10.627 回答