所以在尝试将我的图像适当地拉伸到宽度之后,我意识到我真正的问题是setImageResource的行为不同于setImageDrawable(我正在尝试使用)。下面的XML给了我完美的宽度,宽高比与setImageResource拉伸图像,但与setImageDrawable图像不拉伸到宽度,任何建议,我应该如何处理这个问题?我使用setImageDrawable,因为我从互联网上获得的图像替代品是受欢迎的:)
<ImageView
android:id="@+id/item_image"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"/>
哦,我试过scaletype,一个给出最好的结果是centercrop,但它的作物是不理想的
这个问题确实是陈腐的,但如果有人遇到它,这个问题并不完全是一个bug,而是在18之前版本的Android中一个糟糕的实现决策。如果你的目标是18岁以上,你可能不会看到这个问题。然而,我目前的目标是企业拥有的平板电脑16。
解决方案是创建一个超类的ImageView覆盖onMeasure来强制宽高比:
class MyImageView extends ImageView {
public MyImageView(Context context) {
super(context);
}
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
float iwidth = (float) View.MeasureSpec.getSize(widthMeasureSpec);
float swidth = (float) getDrawable().getIntrinsicWidth();
float sheight = (float) getDrawable().getIntrinsicHeight();
float iheight = sheight / swidth * iwidth;
setMeasuredDimension((int)iwidth, (int)iheight);
}
}
在你的布局中:
<com.mypackage.MyImageView layout_width="match_parent" etc... />
如果你的目标是Android 18+,则adjustViewBounds应该按预期工作
您只需更改xml ImageView
android: layout_width = "宽和"
android: layout_hight = "宽和"
我发现的一个修复方法是使用位图作为setImageBitmap显然类似于setImageResource。我仍然愿意接受其他建议。
你的图像视图的宽度是fill_parent,所以如果你的图像的宽度不够,那么它将被拉伸。如果你不想使用fill_parent,只需替换width "wrap_content"。
<ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"/>