缩放图像为ldpi mdpi hdpi和xhdpi

时间:2014-05-19 10:18:58

标签: android scaling

我有5个按钮,background_button图片大小为267x63。我在ldpi mdpi hdpi xhdpi中复制了分辨率为267x63的所有background_button。 当我尝试运行我的应用程序时,按钮在2,7" QWGA但在平板电脑模式下很小。

在ldpi mdpi hdpi和xhdpi中,我的background_button的最佳升级是什么?

xml按钮:

    <Button  
    android:id="@+id/button5"
    android:layout_width="230dp"
    android:layout_height="60dp"
    android:layout_alignLeft="@+id/textView1"
    android:layout_below="@+id/textView1"
    android:background="@drawable/a"
    android:textColor="#FFFFFF"
    android:textStyle="bold" />

如果我缩放background_button并设置它:

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

我的按钮很严格...... 你可以帮帮我吗?

6 个答案:

答案 0 :(得分:4)

实际上,您不应将相同的图像放在所有文件夹-ldpi,-mdpi,-hdpi。

让我们想象一下,您想要支持xxhdpi设备。您为xxhdpi创建映像(例如1Mb)并将其放到所有文件夹中。 你会在ldpi设备上获得什么?图像将被缩放。屏幕上的图像质量会很糟糕。 另外一件事:如果你想在屏幕上同时拥有100个图像,每个图像为2-5Mb,并为xxhdpi设备创建所有这些图像,那么你可以在ldpi设备上获得OutOfMemoryError。

因此,最佳做法是不要将相同的图像放到所有文件夹中。 如果您有一些独立于分辨率的图像,那么您可以将它们放入可绘制文件夹(不带后缀)。但是你不应该将相同的图像放到ldpi和xxhdpi文件夹中。

因此调整大小的答案非常糟糕。

看看这个article

At&#34;替代抽奖&#34;段。 在此图片上

enter image description here

你可以看到,对于xhdpi设备,你应该有比mdpi大2倍的图像。 等等。

希望有所帮助

答案 1 :(得分:1)

您可以使用以下代码根据屏幕分辨率显示 -

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).
                   getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();

调整图片大小的代码---

private Bitmap resizeImage( final Bitmap image) {
        Bitmap resizedImage = null;
        if(image != null)
        {
        int maxHeight = 80; //actual image height coming from internet
        int maxWidth = 150; //actual image width coming from internet

        int imageHeight = image.getHeight();
        if ( imageHeight > maxHeight )
        imageHeight = maxHeight;
        int imageWidth = (imageHeight*image.getWidth()) // image.getHeight();
        if ( imageWidth > maxWidth ) {
        imageWidth = maxWidth;
        imageHeight = (imageWidth*image.getHeight()) // image.getWidth();
        }
        resizedImage = Bitmap.createScaledBitmap( 
                       image, imageWidth, imageHeight, true);
        }
        return resizedImage;
        }

答案 2 :(得分:1)

我的应用程序也支持多种屏幕尺寸,krossovochkin提供的链接是最好的。然而,对于我的应用程序,我使用了以下宽度尺寸似乎工作正常,分辨率非常适合我需要的东西:

ldpi - 75px(120dpi分辨率)
mdpi - 100px(160dpi分辨率)
hdpi - 150px(240dpi分辨率)
xhdpi - 200px(320dpi分辨率)

但这些都取决于你将要在按钮上显示的内容 注意:确保您按下DOWN no​​t not!!

另请参阅此device display

答案 3 :(得分:1)

你做错了。您不能只将理智的图像放在所有文件夹中 - 您需要为每个存储桶正确缩放。作为解决方案,您应该考虑在一个目标密度中设计所有图形(即xhdpi),然后将其缩小以匹配存储桶要求。由于比例因子已知,您可以通过多种方式执行此操作(也可以使用以下工具:9patch resizerFREDDrawable Resizer或其他方式。

请参阅开发者网站上的这篇Supporting Multiple Screens文章。

答案 4 :(得分:0)

尝试使用此...

<Button  
android:id="@+id/button5"
android:layout_width="230dip"
android:layout_height="60dip"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:background="@drawable/a"
android:textColor="#FFFFFF"
android:textStyle="bold" />

答案 5 :(得分:0)

您应该创建不同大小的图像,并将它们放在相应的文件夹drawable-mdpidrawable-hdpi等中。您不应修改xml代码中的值。查看developer.android的文章。您需要从一个比例开始,例如xxxhdpi,然后从那里缩小图像的密度mdpi,hdpi,xhdpi,xxhdpi。