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

标签 android bitmap

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

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

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

现在位图创建没有问题,我将它作为文件写入设备,然后它从文件系统加载到 webview 中,一切都很好,很漂亮。它的行为完全符合我希望它在 HTC Inspire(我认为是 andriod 2.3)上的行为,位图/webview 占据了设备的整个宽度,位图的大小与 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

关于Android createbitmap 宽度在不同设备上表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19453510/

相关文章:

android - 如何在使用 ScrollView 时隐藏软键盘输入

javascript - Android WebView JavaScript onClick 错误

java - ListView (2 行)onclick : retrieve specific data from clicked item (can't access map-like object)

c++ - Windows 工具栏 - 控制按钮大小和填充

Android - 填充折线图下方的颜色

android - 使用 MediaCodec 和 MediaExtractor 对视频进行解码编码

java - android.graphics.Bitmap.sameAs 在 android O 中,当比较 2 个位图相同的配置、尺寸、像素数据时不返回 true

android - 通过 Parcel 传输 ByteArray 返回 NullPointerException

android - 是否可以从android中的位图中删除透明像素

java - Build Gradle 依赖项中的库版本 28 和 26.1 不兼容