加载大图像以适合ImageView

时间:2018-06-11 03:14:48

标签: android android-imageview picasso

我想将尺寸最小约1800px宽度和1400px高度的图像加载到图像视图中,如下面的布局:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp">

    <CheckBox
        android:id="@+id/customiseCheckBox"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:button="@drawable/custom_checkbox_bkg"
        android:layout_centerVertical="true" />

    <ImageView
        android:id="@+id/customizeSelImg"
        android:layout_width="match_parent"
        android:layout_height="180dp"
        android:layout_marginRight="5dp"
        android:layout_toRightOf="@id/customiseCheckBox"
        android:contentDescription="@string/app_name"
        android:scaleType="fitCenter"
        tools:src="@drawable/artcard" />

</RelativeLayout>

我尝试过不同的比例类型,但加载的图像并未涵盖我为imageview指定的尺寸,而是加载rather too small

我也尝试过使用Picasso,就像下面一样;我使用的是回收图像:

@Override
public void onBindViewHolder(final CustomizeViewHolder viewholder, int position) {
    final Customize customize = itemsList.get(position);
    viewholder.customiseCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if (b){
                customize.setChecked(b);
            }
        }
    });

    Picasso.with(context)
            .load(customize.getIcon())
            .fit()
            .centerCrop()
            .into(viewholder.customizeSelImg);
}

但这似乎不起作用。有没有什么办法可以在没有压缩或质量损失的情况下将完整图像显示到imageview的指定尺寸?谢谢。

示例图片我想要适合: enter image description here

1 个答案:

答案 0 :(得分:0)

你需要根据设备重量X高度找到图像比例然后你可以设置动态图像高度重量。

public void setHeightWidthFromDeviceScreen() {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        int height = displayMetrics.heightPixels;
        int width = displayMetrics.widthPixels;

        //set banner height using ratio
        int bannerHeight = (int) (width / 1.8014705882);

       //set height to image
        imgSlider.getLayoutParams().height = bannerHeight;


    }

1.8014705882这是我基于metrics.heightPixels,metrics.widthPixels的图片比例,您可以根据自己的要求进行更改

找到图像的比例

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
float ratio = ((float)metrics.heightPixels / (float)metrics.widthPixels
);