Android按图像大小动态更改图像视图大小

时间:2017-02-20 07:30:56

标签: android xml imageview

您好我有一个ImageView,它显示来自网址的图片。图像大小不同。它们可以是方形或纵向形状或景观形状。我需要相应地设置图像视图大小,不需要拉伸或裁剪。

如果图像大小为512x512,则ImageView应为方形,并与屏幕中心对齐。

如果图像尺寸类似于1024x800,则ImageView尺寸应为水平矩形,并与屏幕中心对齐。

在所有情况下,宽度应与父级相匹配,但高度应相应调整。我怎样才能做到这一点?

下面是我的xml代码。

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <android.support.v7.widget.CardView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:maxHeight="400dp"
        android:maxWidth="300dp"
        android:layout_margin="10dp"
        app:cardBackgroundColor="@color/white">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <android.support.v4.widget.NestedScrollView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scrollbars="none">
                <ImageView
                    android:id="@+id/image"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:adjustViewBounds="true"
                    android:scaleType="fitXY"
                    android:minWidth="260dp"
                    tools:ignore="ContentDescription" />
            </android.support.v4.widget.NestedScrollView>

            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/grey_light" />

            <TextView
                android:id="@+id/title"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:layout_gravity="right"
                android:layout_margin="@dimen/space_small_low"
                android:background="@drawable/transparent_bg"
                android:textColor="@color/orange" />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</FrameLayout>

4 个答案:

答案 0 :(得分:1)

在xml中将imageView的宽度设置为match_parent,并在运行时计算图像的高度,以使用以下代码维持宽高比:

Display display = getActivity().getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int newWidth = size.x;

//Get actual width and height of image
int width = bitmap.getWidth();
int height = bitmap.getHeight();

// Calculate the ratio between height and width of Original Image
float ratio = (float) height / (float) width;
float scale = getApplicationContext().getResources().getDisplayMetrics().density;
int newHeight = (int) (width * ratio)/scale;

通过调用图像处理库的.resize函数,传递此newHeight和newWidth来调整图像大小。

答案 1 :(得分:0)

android:scaleType="fitXY"更改为android:scaleType="centerInside"

根据屏幕宽度设置ImageView宽度,意味着您应该将ImageView的宽度计算为屏幕宽度的60%或类似值,并使用android:scaleType="centerInside"可以自行计算高度而不更改图像宽高比。

答案 2 :(得分:0)

Jsut把wrap_content放到它会自动占用一个大小。         android:layout_height =“wrap_cont`enter code here`ent”         /&GT;

答案 3 :(得分:0)

听说Picasso图书馆?它不仅可以裁剪图像,还可以为您管理缓存的复杂性。

如何设置?在Gradle中添加此依赖项并同步。

compile 'com.squareup.picasso:picasso:2.5.2'

如何使用图书馆?很简单,你只需要调用单例代码。

ImageView imageView  = ....
Picasso.with(contextHere())
       .load("http://example.com/myimage.jpg)
       .fit()
       .centerCrop()
       .into(imageView);