使ImageView适合CardView的宽度

我有一个圆angular的CardView ,我想在顶部有一个ImageView ,如下面的材料devise指南中所示的示例所示。

components_cards8.png

 <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="wrap_content" android:layout_height="wrap_content" card_view:cardCornerRadius="4dp"> <!-- ... --> </android.support.v7.widget.CardView> 

然后在CardView里面有这个ImageView

 <ImageView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="150dp" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:scaleType="centerCrop" android:src="@drawable/default_cover" /> 

如果我有card_view:cardCornerRadius设置为0dp那么ImageView就像我想要的那样适合卡片。

IMAGE_1

但是, 材料devise指南指出卡片应该有圆angular,而不是方angular。

我遇到的问题是,当我将card_view:cardCornerRadius设置为card_view:cardCornerRadius以外的0dp ,例如4dp ,则会发生以下情况:

IMAGE_2

可以看出, ImageView不适合CardView

我的问题是,如何使这个ImageView适合CardView的布局,当它有圆angular。

CardView与ImageView

我通过在RoundedImageView放置一个RoundedImageView来实现这个CardView 。 您还需要设置适当的CardView属性。

https://medium.com/@etiennelawlor/layout-tips-for-pre-and-post-lollipop-bcb2e4cdd6b2#.kmb24wtkk

你需要做2件事情:

1)在您的CardView上调用setPreventCornerOverlap(false)

2)在CardView中放入圆形的 Imageview

关于四舍五入你的imageview,我有同样的问题,所以我做了一个库,你可以在每个angular落设置不同的半径 。 有一个好的库(vinc3m1的RoundedImageView)支持ImageView上的圆angular,但是它只支持每个angular上相同的半径。 但是我希望它只能左上angular和右上angular四舍五入。

最后,我得到了我想要的结果如下。

https://github.com/pungrue26/SelectableRoundedImageView

CardView内部的圆角ImageView

如果您的图像大小(宽度)使用ImageView宽度固定,则只需将ImageView属性更改为:

 android:scaleType="fitXY" 

那是。 没有额外的图像angular落四舍五入,没有繁忙的工作。 除此之外,应用程序的性能也很有效。

注意:我的build议可能不适合大尺寸ImageView小图像。

编辑2015/09/29

https://github.com/vinc3m1/RoundedImageView添加了对所选angular落舍入的支持;

您也可以使用makeramen RoundedImageView https://github.com/vinc3m1/RoundedImageView ,并删除CardView中的LolliPop使用前的自动填充

yourCardView.setPreventCornerOverlap(假);

然后设置填充你需要显示cardview的阴影

drawable文件夹中创build一个bck_rounded.xml 。 给它一个与card_view相同的半径。

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="4dp" /> </shape> 

把它应用到你的android:background="@drawable/bck_rounded.xml"android:background="@drawable/bck_rounded.xml"

我解决了设置的问题
1) app:cardUseCompatPadding="false"
2)设置一个圆angular的imageView背景

 <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corners android:radius="4dp" /> </shape>