web-dev-qa-db-fra.com

Impossible d'obtenir une forme de cercle exacte lors de l'utilisation du mode carte

J'utilise l'affichage par carte pour le bouton d'action flottant dans la conception de matériel Android. J'utilise le code suivant pour obtenir le cercle 

<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>

J'ai défini le rayon de coin sur la moitié de la largeur. mais je n'arrive toujours pas à obtenir la forme du cercle.enter image description here

27
Ayyappan

J'ai résolu le problème. Maintenant, Android fournit la bibliothèque de conception pour la conception de matériel, qui a le FloatingActionButton. Pas besoin de personnaliser l'affichage de la carte pour le bouton d'action flottante.

<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"  />

Ajouter une bibliothèque de conceptions dans des dépendances de niveaux

compile 'com.Android.support:design:23.1.1'

Pour plus de détails, reportez-vous à ce lien link

16
Ayyappan

Pour obtenir une forme de cercle parfaite à l'aide d'une vue de carte, le rayon de l'angle doit être égal à la moitié de la largeur ou de la hauteur (en tenant compte du fait qu'il s'agit d'un carré). De plus, j'ai remarqué que vous utilisez card_view params, ne le faites pas.

<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"
>

10
Alexandr Kotikov

Pour obtenir une forme circulaire en utilisant la vue Carte, vous pouvez définir la propriété shape, Android: shape = "ring".
app: cardCornerRadius doit être défini sur la moitié de la largeur ou de la hauteur de la vue enfant.

<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>
7
silent_control

J'ai essayé votre code et découvert que les cartes étaient moins arrondies en ce qui concerne l'augmentation de la valeur d'élévation de la carte. Essayez de le régler sur zéro et cela au moins le rend meilleur.

card_view:cardElevation="0dp";

Mais une meilleure option serait probablement d’utiliser la FloatingActionButton pour le bouton rond

<Android.support.design.widget.FloatingActionButton
    Android:src="@drawable/your_drawble_name"
    app:fabSize="normal"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content" />
5

Je suis venu avec une solution simple d'utilisation d'un Drawable et c'est incroyable!

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

enter image description here

5
Dhruv Kaushal

utilisation 

forme = "anneau"

utiliser les mêmes layout_height et layout_weight

et 

app: cardCornerRadius = la moitié de layout_height ou layout_weight

exemple

<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>
5
Gautam Kumar

Oui, je l'ai atteint en réduisant la moitié de CardCornerRadius à la hauteur de la vue. 

0
RAHUL