Android:如何以相同的比例展开矩形图像以适应屏幕
我的应用程序中设置了以下矩形图像 现在我试着在两边以相同的比例展开图像,直到它适合屏幕。但我无法得到预期的图像 到目前为止,我的代码是:Android:如何以相同的比例展开矩形图像以适应屏幕,android,imageview,Android,Imageview,我的应用程序中设置了以下矩形图像 现在我试着在两边以相同的比例展开图像,直到它适合屏幕。但我无法得到预期的图像 到目前为止,我的代码是: <ImageView android:id="@+id/imgid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/shayneward" android:scaleTy
<ImageView
android:id="@+id/imgid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/shayneward"
android:scaleType="fitXY"/>
它不在乎图像被切断,但它应该以相同的比例在两侧展开,直到它适合屏幕。将
android:scaleType=“fitXY”
更改为android:scaleType=“centerCrop”
,以获得您想要的行为
不同的缩放选项记录在下。尝试使用以下选项:
android:scaleType="centerCrop"
从Android文档中,center crop执行以下操作:
均匀缩放图像(保持图像的纵横比),以便
图像的两个尺寸(宽度和高度)将等于或
大于视图的相应尺寸(减去填充)
请参阅有关
ImageView的文档。如果图像太小,则可能会出现问题,因为它没有按屏幕尺寸进行缩放
我使用这个类来解决这个问题:
public class FixedCenterCrop extends ImageView {
public FixedCenterCrop(Context context) {
super(context);
setScaleType(ScaleType.MATRIX);
}
public FixedCenterCrop(Context context, AttributeSet attrs) {
super(context, attrs);
setScaleType(ScaleType.MATRIX);
}
public FixedCenterCrop(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setScaleType(ScaleType.MATRIX);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
recomputeImgMatrix();
}
@Override
protected boolean setFrame(int l, int t, int r, int b) {
recomputeImgMatrix();
return super.setFrame(l, t, r, b);
}
private void recomputeImgMatrix() {
final Matrix matrix = getImageMatrix();
float scale;
final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
final int drawableWidth = getDrawable().getIntrinsicWidth();
final int drawableHeight = getDrawable().getIntrinsicHeight();
if (drawableWidth * viewHeight > drawableHeight * viewWidth) {
scale = (float) viewHeight / (float) drawableHeight;
} else {
scale = (float) viewWidth / (float) drawableWidth;
}
matrix.setScale(scale, scale);
matrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight*scale)/2);
setImageMatrix(matrix);
}
}
非常感谢android:scaleType=“centerCrop”
对我来说非常有效。非常有效+1对于它,这里的缩放类型是正确的,但常量是错误的——在XML中,它应该是“centerCrop”,而不是“CENTER\u CROP”。谢谢,我无意中将您使用的常量放在了编程设置中。