繁体   English   中英

Android createbitmap宽度在不同设备上表现不同

[英]Android createbitmap width behaves different on different devices

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

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

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

现在创建位图没有问题,我将其作为文件写入设备,然后将其从文件系统加载到webview中,一切正常。 它的行为完全符合我希望它在HTC Inspire(我认为是Andriod 2.3)上的行为,位图/ Web视图占据了设备的整个宽度,位图的大小与linear1的宽度完全相同。 但是,当我在HTC One MIni(android 4.2.2)上进行测试时,位图的宽度远大于设备的宽度和linear1的宽度,尽管我最初是使用linear1的宽度创建位图的。占据设备的整个宽度。 当我在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();

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

尝试将这些金额乘以

this.getResources().getDisplayMetrics().density

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM