避免在不同的可绘制文件夹中处理相同的drawable

时间:2014-04-18 15:38:54

标签: android drawable

我的应用中有这个可绘制的文件夹:

绘制

drawable -hdpi,mdpi,ldpi,xhdpi和xxhdpi。

绘制 -sw240dp-土地xxxhdpi

绘制 -sw360dp-土地xxhdpi

绘制 -sw6000dp-土地xhdpi

我在所有这些文件夹中都有相同大小的可绘制文件。我需要那些文件夹导致景观密度。

有什么方法可以避免在不同的可绘制文件夹中处理相同的文件吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

  

有什么方法可以避免在不同的可绘制文件夹中处理相同的文件吗?

首先摆脱那些你不需要的东西:

  • res/drawable/是不必要的,因为它永远不会被使用,因为你在各种密度桶中都有可绘制的东西。对于您未使用的密度(例如res/drawable-*dpi/),Android会始终根据您的-tvdpi/资源调整其中一个以匹配屏幕密度。

  • 如果res/drawable-sw360dp-land-xxhdpi/的图标文件与res/drawable-xxhdpi/中的图标文件相同,则您不需要res/drawable-sw360dp-land-xxhdpi/

  • 如果res/drawable-sw6000dp-land-xhdpi/的图标文件与res/drawable-xhdpi/中的图标文件相同,那么您不需要`res / drawable-sw6000dp-land-xhdpi /.

  • 等等

除此之外,您可以使用bitmap resource aliases允许一个位图文件在多个资源目录中表示。

答案 1 :(得分:1)

是的,有,但代价是一些轻微的扭曲和仔细的布局设计。你能做的就是将你的高分辨率画面放入drawable-nodpi; Android将从该文件夹中拉出drawable而不进行缩放。接下来,为各种屏幕尺寸创建一系列维度文件dimens.xml。例如,对于正常尺寸的屏幕:

<resources>    
    <dimen name="dim_0dp">0dp</dimen>
    <dimen name="dim_1dp">1dp</dimen>
    <dimen name="dim_2dp">2dp</dimen>
    <dimen name="dim_3dp">3dp</dimen>
    <dimen name="dim_4dp">4dp</dimen>
    <dimen name="dim_5dp">5dp</dimen>
    <dimen name="dim_6dp">6dp</dimen>
    <dimen name="dim_7dp">7dp</dimen>
    <dimen name="dim_8dp">8dp</dimen>
    <dimen name="dim_9dp">9dp</dimen>
    ...
</resources>

而且,sw-600dp平板电脑的资源文件将如下所示:

<resources>    
    <dimen name="dim_0dp">0dp</dimen>
    <dimen name="dim_1dp">1.5dp</dimen>
    <dimen name="dim_2dp">3dp</dimen>
    <dimen name="dim_3dp">4.5dp</dimen>
    <dimen name="dim_4dp">6dp</dimen>
    ...
</resources>

然后,在您使用ImageView的布局中的每个位置或使用drawable设置背景时,请确保根据您的尺寸文件指定宽度和高度。例如:

<ImageView 
         android:layout_width="@dimens/dim_10dp"
         android:layout_height="@dimen/dim_20dp" />

因此,在手机上,图像将缩放到10dp和20dp;而在600dp的平板电脑上,它将缩放到15dp和30dp。这意味着一些轻微的失真,但由于你缩小而不是向上,所以失真很小,很难被大多数用户检测到。

这是我们用于发布三款成功游戏的策略,否则我们的APK将会非常庞大​​。