Android 避免在不同的绘图文件夹中处理相同的绘图

Android 避免在不同的绘图文件夹中处理相同的绘图,android,drawable,Android,Drawable,我的应用程序中有以下可绘制文件夹: 可拉伸 可绘制-hdpi、mdpi、ldpi、xhdpi和xxhdpi 可抽出式-sw240dp接地xxxhdpi 可抽出式-sw360dp陆地xxhdpi 可抽出式-sw6000dp陆上xhdpi 我在所有这些文件夹中都有相同大小的可绘制文件。我需要那个些文件夹,因为风景中有密度 有什么方法可以避免在不同的可绘制文件夹中处理相同的文件 提前谢谢 有什么方法可以避免在不同的可绘制文件夹中处理相同的文件 从摆脱你不需要的东西开始: res/drawable/是

我的应用程序中有以下可绘制文件夹:

可拉伸

可绘制-hdpi、mdpi、ldpi、xhdpi和xxhdpi

可抽出式-sw240dp接地xxxhdpi

可抽出式-sw360dp陆地xxhdpi

可抽出式-sw6000dp陆上xhdpi

我在所有这些文件夹中都有相同大小的可绘制文件。我需要那个些文件夹,因为风景中有密度

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

提前谢谢

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

从摆脱你不需要的东西开始:

  • res/drawable/
    是不必要的,因为它永远不会被使用,因为您在各种密度桶中都有drawable。Android将始终缩放您的
    res/drawable-*dpi/
    资源之一,以匹配您未使用的屏幕密度(例如,
    -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/

  • 等等


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

是的,有,但代价是一些轻微的扭曲和仔细的布局设计。你所能做的就是把你的高分辨率可绘制图像放到可绘制的nodpi中;Android将从该文件夹中拉出可绘制文件,而无需缩放。接下来,为各种屏幕大小创建一系列维度文件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>

0dp
1dp
2dp
3dp
4dp
5dp
6dp
7dp
8dp
9dp
...
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 
         android:layout_width="@dimens/dim_10dp"
         android:layout_height="@dimen/dim_20dp" />

0dp
1.5dp
3dp
4.5dp
6dp
...
然后,在布局中使用ImageView或使用可绘制文件设置背景的每个位置,确保根据dimens文件指定宽度和高度。例如:

<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 
         android:layout_width="@dimens/dim_10dp"
         android:layout_height="@dimen/dim_20dp" />

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


这是我们用来运送三款成功游戏的策略,否则我们的APK将是巨大的。

谢谢你的回答。。。我在我的drawable文件夹中有我的xml drawable,这很有用。:)@m:对不起,根据你的问题,我假设你所有指定的目录中的每个可绘制文件都是重复的。谢谢,我也会尝试一下。