在某些设备上更换imageview中的现有drawable是错误的

时间:2012-05-29 10:06:03

标签: android imageview drawable scale

情况:

我有一个带有两个drwables图层列表的imageview。 可擦拭的框架为800x400px,盖板可拉伸为800x380px。 两个图像都位于文件夹drawable

<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中的drwable具有800x400的固有高度,与drawable的尺寸相同。 在较大的屏幕上,可拉伸的固有高度大30%。

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

我所期待的是,替换旧版本的drawable应该按照旧版本的+ 30%扩展。但这并没有发生。

问题:

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

2 个答案:

答案 0 :(得分:1)

首先,我建议以不同的方式进行封面/封面:

  1. 使您的框架成为nine-patch drawable,这样您就可以在九个修补程序中定义在其上方绘制封面时仍然可见的填充。
  2. 将可绘制的框架设为background
  3. 将封面设置为图片的src,而不是图层列表
  4. 不要忘记为scaleType设置ImageView,使用不同的选项,以满足您的需求。
  5. <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"/>
    

答案 1 :(得分:1)

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

到目前为止,解决问题的唯一方法是将我的资源放入文件夹drawable-nodpi。 Here is the reference to the docs