Android createbitmap宽度在不同设备上的行为不同

时间:2013-10-18 15:35:18

标签: android bitmap

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

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

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

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

为了清楚起见,我没有提到我知道可以调整的webview的缩放,而我所指的问题是位图的大小。这可能与每个设备的分辨率,每个夹点的像素等有关,但我无法理解的是因为我实际上使用了线性1的宽度来设置位图的宽度,那么为什么它不会完全相同。还有一件事,如果我在位图上做了一个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();

1 个答案:

答案 0 :(得分:2)

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

尝试将这些数量乘以

this.getResources().getDisplayMetrics().density