使ImageView适合CardView的宽度

Dan*_*Dan 64 android android-appcompat imageview android-cardview

我有一个CardView圆角,我希望有一个ImageView顶部,如下面的材料设计指南中的示例所示.

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>
Run Code Online (Sandbox Code Playgroud)

然后在里面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" />
Run Code Online (Sandbox Code Playgroud)

如果我有card_view:cardCornerRadius设置,0dp那么ImageView卡就像我想要的那样.

IMAGE_1

但是,材料设计指南规定卡片应有圆角,而不是方角.

我遇到的问题是当我设置card_view:cardCornerRadius其他东西时 0dp,例如4dp,然后发生以下情况:

IMAGE_2

可以看出,ImageView它不适合CardView.

我的问题是,我怎样才能使它ImageView适合CardView圆角时的布局.

김준호*_*김준호 58

你需要做两件事:

1)调用setPreventCornerOverlap(false)您的CardView.

2)在CardView中放置圆形 Imageview

关于舍入你的imageview,我遇到了同样的问题,所以我创建了一个库,你可以在每个角上设置不同的半径.有一个很好的库(vinc3m1的RoundedImageView)支持ImageView上的圆角,但它只支持每个角上相同的半径.但我希望它只是左上角和右上角的圆角.

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

https://github.com/pungrue26/SelectableRoundedImageView

CardView中的圆形ImageView

  • pre lolipop的setPreventCornerOverlap(false)确实有帮助 (3认同)

jam*_*mes 23

如果图像大小(宽度)与ImageView宽度一致,那么您只需将ImageView属性更改为:

android:scaleType="fitXY"
Run Code Online (Sandbox Code Playgroud)

那是.没有额外的图像转角,没有繁忙的工作.除了它有效的应用程序的性能.

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

  • 我不明白这一切的赞成.直接在CardView下面或在其下面的任何ViewGroup中的ImageView将覆盖圆角而不是将图像拟合到圆角的内部. (6认同)

too*_*o42 15

带有ImageView的CardView

我把它放在一个RoundedImageView内部工作CardView.您还需要设置适当的CardView属性.

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

  • 请添加相关信息以回答而不是依赖链接.`RoundedImageView`不是官方类. (13认同)
  • 当他说RoundedImageView我觉得它是正式的时,我的心跳得很快 (2认同)

Pen*_*zzz 7

编辑2015/09/29

https://github.com/vinc3m1/RoundedImageView添加了对选定角点的舍入的支持

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

yourCardView.setPreventCornerOverlap(假);

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

  • vinc3m1的RoundedImageView是一个很好的库,但它只支持每个角上相同的半径.但是CardView内部的ImageView应该只是左上角和右上角的圆角.所以我做了一个你可以在每个角上设置不同的半径.https://github.com/pungrue26/SelectableRoundedImageView (2认同)