0

情况:

我有一个带有两个 drwable 图层列表的图像视图。可绘制的框架为 800x400 像素,可绘制的封面为 800x380 像素。两个图像都位于可绘制的文件夹中

<ImageView
    android:id="@+id/preview_img_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.9"
    android:adjustViewBounds="true"
    android:src="@drawable/result_preview"/>

drawable/result_preview 中的 Drwable 图层列表

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:id="@+id/cover">
    <bitmap
        android:gravity="left|top"
        android:src="@drawable/cover" />
</item>
<item
    android:id="@+id/frame">
    <bitmap
        android:gravity="left|top"
        android:src="@drawable/frame" />
</item>
</layer-list>

此设置按预期工作,封面显示在所有设备上。现在用户可以将样品盖更换为相同尺寸的另一个盖。

替换图层列表中的封面并保持框架不变。

LayerDrawable layer = (LayerDrawable) getResources().getDrawable(R.drawable.result_preview);

InputStream coverIs = getContentResolver().openInputStream(Uri.parse(coverUri));
this.drwCover = (BitmapDrawable) BitmapDrawable.createFromStream(coverIs, coverUri);
drwCover.setGravity(Gravity.LEFT | Gravity.TOP);
//drwCover.getBitmap().setDensity(160);
layer.setDrawableByLayerId(R.id.cover, drwCover);
    imageView.setImageDrawable(layer);

问题:

用新的盖子(与旧的尺寸相同)更换当前的盖子会产生不同的结果,具体取决于所使用的设备。

在具有 3.2 屏幕和 480x320 分辨率的设备上,更换的盖子适合框架。在分辨率为 3.7 和 800x480 的设备上,更换后的封面显示得比旧封面小。

我发现小型设备上的 imageview 中的可绘制对象具有 800x400 的固有高度,与可绘制对象的尺寸相同。在更大的屏幕上,drawable 的固有高度要大 30%。

我知道内在价值可能因屏幕而异。

我所期待的是,替换旧的drawable 应该像旧的那样按比例放大到+30%。但这并没有发生。

问题:

是否可以选择将图像视图或图层列表告知 Adpt 本身?我认为应该有办法做到这一点,因为系统一开始就已经这样做了。

4

2 回答 2

1

首先,我建议以不同的方式制作封面/框架:

  1. 使您的框架成为可绘制的九个补丁,因此您可以在九个补丁中定义当在其顶部绘制封面时将保持可见的填充。
  2. 将可绘制的框架作为background
  3. 将封面设置为src图像的,而不是图层列表
  4. 不要忘记scaleType为您设置一个ImageView,玩不同的选项,以满足您的需求。
<ImageView
    android:id="@+id/preview_img_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="0.9"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:background="@drawable/frame"
    android:src="@drawable/cover"/>
于 2012-05-29T10:17:53.000 回答
1

对于其他有同样问题的人。9patch png 是我没有的问题的解决方案。

到目前为止,唯一接近解决问题的方法是将我的资源放入文件夹 drawable-nodpi 中。 这是对文档的参考

于 2012-09-04T18:28:00.713 回答