使用卡片视图时无法获得精确的圆形

Ayy*_*pan 35 android material-design android-cardview

我在android材料设计中使用卡片视图浮动动作按钮.我正在使用以下代码获取圆圈

<android.support.v7.widget.CardView
    android:id="@+id/fab"
    android:layout_width="38dp"
    android:layout_height="38dp"
    android:layout_marginBottom="10dp"
    android:layout_marginRight="10dp"
    card_view:background="@color/blue"
    card_view:cardCornerRadius="19dp"
    card_view:cardPreventCornerOverlap = "false"
    card_view:cardElevation="6dp" >
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

我将拐角半径设置为宽度的一半.但我仍然无法得到圆形.在此输入图像描述

Ayy*_*pan 22

我已经解决了这个问题.现在android提供了用于材质设计的设计库,其中包含FloatingActionButton.无需为浮动操作按钮自定义卡片视图.

<android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"  />
Run Code Online (Sandbox Code Playgroud)

在gradle依赖项中添加设计库

compile 'com.android.support:design:23.1.1'
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此链接


Ale*_*kov 17

要使用卡片视图获得完美的圆形,角半径应为宽度或高度的1/2(考虑到它是正方形).另外,我注意到你正在使用card_view参数,不要.

<android.support.v7.widget.CardView
android:layout_width="38dp"
android:layout_height="38dp"
app:cardCornerRadius="19dp"
app:cardElevation="6dp"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
android:id="@+id/fab"
android:background="@color/blue"
>
Run Code Online (Sandbox Code Playgroud)


sil*_*rol 15

要使用卡片视图实现圆形形状,您可以设置形状属性,android:shape ="ring".
app:cardCornerRadius应设置为子视图宽度或高度的一半

<android.support.v7.widget.CardView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:innerRadius="0dp"
        android:shape="ring"
        app:cardCornerRadius="75dp">

        <ImageView
            android:layout_width="150dp"
            android:layout_height="150dp"
            android:layout_gravity="center"
            android:background="@drawable/image" />
     </android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)

  • 您不需要添加 **shape** 属性,因为 **cardCornerRadius** 就足够了。 (2认同)

Gau*_*mar 9

使用

shape ="ring"

使用相同的layout_height和layout_weight

app:cardCornerRadius = layout_height或layout_weight的一半

<android.support.v7.widget.CardView
                        android:id="@+id/cardview"
                        android:layout_width="110dp"
                        android:layout_height="110dp"
                        android:shape="ring"
                        app:cardCornerRadius="55dp">
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)


Dhr*_*hal 8

我想出了使用Drawable的简单解决方案,它看起来很神奇!

获取Drawable https://drive.google.com/open?id=0B4Vo_ku-aIKzUFFnUjYxYVRLaGc

在此输入图像描述


小智 6

<androidx.cardview.widget.CardView
        android:layout_width="60dp"
        android:layout_marginStart="150dp"
        app:cardCornerRadius="360dp"
        android:layout_height="60dp">
Run Code Online (Sandbox Code Playgroud)

  • 请添加一些解释来证实您的答案。 (3认同)

Col*_*iza 5

我尝试了你的代码,发现卡片在卡片高度值的增加方面不那么圆.尝试将其设置为零,这至少使它看起来更好.

card_view:cardElevation="0dp";
Run Code Online (Sandbox Code Playgroud)

但是一个可能更好的选择是使用FloatingActionButton圆形按钮

<android.support.design.widget.FloatingActionButton
    android:src="@drawable/your_drawble_name"
    app:fabSize="normal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)


Moh*_*Zek 5

将此行添加到CardView将 cardCornerRadius 设置为圆直径。

app:cardCornerRadius="360dp"