我一直在努力设置位图,以便它适合ImageView
边界。
它只能通过scaleType: fitXY
起作用。我的位图图像大小低于ImageView
(保存在100X100像素),我希望我的位图图像适合并伸展到ImageView
。
以下是一些代码:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:src="@drawable/locked_image"
android:scaleType="fitXY"
/>
以下是设置ImageView
的代码(我在不同的地方设置scaleType
进行测试):
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ImageView imageView;
if (convertView == null) {
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
imageView.setScaleType(ScaleType.FIT_XY);
} else {
imageView = (ImageView) convertView;
imageView.setScaleType(ScaleType.FIT_XY);
}
imageLoader.displayImage(imagesIds[position], imageView, options);
imageView.setScaleType(ScaleType.FIT_XY);
return imageView;
}
以下是它的外观:
正如您所看到的,ImageView
的高度很好,但我希望它的宽度相同。我无法通过我访问我的位图图像活动,所以请不要让我调整我的位图大小。我真的不明白为什么它不能正常工作。
修改
只是为了让问题更容易理解。为每个设备计算ImageView
高度。每个设备都不同。我希望ImageView
的宽度与高度相同。我正在使用Two-WayGridView
库来显示图像,如果它有任何区别。
答案 0 :(得分:9)
使用scaleType
不会改变ImageView的大小,因为您似乎应该这样做。它所做的就是将位图缩放到 的ImageView(它的效果非常好,从你的截图判断)。
如果你想制作方形ImageView,你应该尝试查看this question。
另外,我不确定我理解你为什么使用TwoWayGridView库。它专门设计用于指定行/列的数量,并且它将拉伸项目以适应。这似乎与你想要的完全相反,因为你想让它们成为正方形。如果您覆盖链接的问题/答案中显示的每个项目的onMeasure()
,则普通的GridView将起作用。
答案 1 :(得分:3)
我想知道你用什么容器小部件来保存ImageView
例如... GridView,ListView等...
如果使用GridView,则尝试通过GridView.setNumColumns()设置列数。
如果仍然不起作用,您尝试通过多种方式之一使用AspectRatioFrameLayout类
这门课很简单。请按照以下步骤操作!
1。在res / attrs.xml中添加属性
<declare-styleable name="AspectRatioFrameLayout">
<attr name="aspectRatio" format="float" />
</declare-styleable>
2。创建AspectRatioFrameLayout类
public class AspectRatioFrameLayout extends FrameLayout {
private static final String TAG = "AspectRatioFrameLayout";
private static final boolean DEBUG = false;
private float mAspectRatio; // width/height ratio
public AspectRatioFrameLayout(Context context) {
super(context);
}
public AspectRatioFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initAttributes(context, attrs);
}
public AspectRatioFrameLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initAttributes(context, attrs);
}
private void initAttributes(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.AspectRatioFrameLayout);
mAspectRatio = typedArray.getFloat(R.styleable.AspectRatioFrameLayout_aspectRatio, 1.0f);
typedArray.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int widthSize = MeasureSpec.getSize(widthMeasureSpec);
int heightMode = MeasureSpec.getMode(heightMeasureSpec);
int heightSize = MeasureSpec.getSize(heightMeasureSpec);
if (DEBUG) Log.d(TAG, "widthMode:"+widthMode+", heightMode:"+heightMode);
if (DEBUG) Log.d(TAG, "widthSize:"+widthSize+", heightSize:"+heightSize);
if ( widthMode == MeasureSpec.EXACTLY && heightMode == MeasureSpec.EXACTLY ) {
// do nothing
} else if ( widthMode == MeasureSpec.EXACTLY ) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec((int)(widthSize / mAspectRatio), MeasureSpec.EXACTLY);
} else if ( heightMode == MeasureSpec.EXACTLY ) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec((int)(heightSize * mAspectRatio), MeasureSpec.EXACTLY);
} else {
// do nothing
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
3。修改list_item_image.xml
<your.package.AspectRatioFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
app:aspectRatio="1">
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:src="@drawable/locked_image"
android:scaleType="fitXY"
/>
</your.package.AspectRatioFrameLayout>
答案 2 :(得分:1)
使用imageView的背景属性,而不是使用src属性。位图将被拉伸。
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageView"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="@drawable/locked_image"
android:scaleType="fitXY"
/>
答案 3 :(得分:-1)
使用背景与fitxy而不是使用src。它会拉伸你的形象:
android:background="@drawable/locked_image"
android:scaleType="fitXY"