情况:
我有一个带有两个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本身?我认为应该有办法这样做,因为系统在开始时已经这样做了。
答案 0 :(得分:1)
首先,我建议以不同的方式进行封面/封面:
background
src
,而不是图层列表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"/>
答案 1 :(得分:1)
对于其他有同样问题的人。 9patch png解决了我没有的问题。
到目前为止,解决问题的唯一方法是将我的资源放入文件夹drawable-nodpi。 Here is the reference to the docs