webentwicklung-frage-antwort-db.com.de

Bei Verwendung der Kartenansicht kann keine exakte Kreisform abgerufen werden

Ich verwende die Kartenansicht für schwebende Aktionsschaltflächen im Android-Materialdesign. Ich benutze folgenden Code, um den Kreis zu erhalten 

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

Ich habe den Eckenradius als die Hälfte der Breite eingestellt. aber ich kann immer noch nicht die kreisform bekommen.enter image description here

27
Ayyappan

Ich habe das Problem gelöst. Jetzt bietet Android eine Design-Bibliothek für Materialdesign, die den FloatingActionButton enthält. Es ist nicht erforderlich, die Kartenansicht für schwebende Aktionsschaltflächen anzupassen.

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

Fügen Sie eine Designbibliothek in Abstufungsabhängigkeiten hinzu

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

Für mehr Details verweisen wir auf diesen link

16
Ayyappan

Um eine perfekte Kreisform mithilfe einer Kartenansicht zu erhalten, sollte der Eckenradius 1/2 der Breite oder Höhe betragen (unter Berücksichtigung der Tatsache, dass es sich um ein Quadrat handelt). Ich habe auch bemerkt, dass Sie card_view-Parameter verwenden, nicht.

<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

Um eine kreisförmige Form mithilfe der Kartenansicht zu erhalten, können Sie die shapeproperty, Android-Datei einstellen: shape = "ring" .
app: cardCornerRadius sollte auf die Hälfte der Breite oder Höhe der untergeordneten Ansicht eingestellt werden

<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

Ich habe Ihren Code ausprobiert und herausgefunden, dass die Karten in Bezug auf die Erhöhung des Kartenerhöhungswerts weniger rund waren. Versuchen Sie, den Wert auf null zu setzen, und dies macht es zumindest besser.

card_view:cardElevation="0dp";

Eine wahrscheinlich bessere Option wäre jedoch die Verwendung der FloatingActionButton für den runden Button

<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

Ich habe mir eine einfache Lösung von Using a Drawable ausgedacht und es sieht toll aus!

Holen Sie sich Drawable hier https://drive.google.com/open?id=0B4Vo_ku-aIKzUFFnUjYxYVRLaGc

 enter image description here

5
Dhruv Kaushal

benutzen 

form = "Ring"

verwenden Sie dasselbe layout_height und layout_weight

und 

app: cardCornerRadius = die Hälfte von layout_height oder layout_weight

beispiel

<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

Ja, ich habe es erreicht, indem ich die Hälfte des CardCornerRadius auf die Höhe seiner Ansicht reduzierte. 

0
RAHUL

card_layout.xml

<Android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/card_view"
    Android:layout_gravity="center"
    Android:layout_width="250dp"
    Android:layout_height="200dp">

    <ImageView
        Android:id="@+id/card_thumbnail_image"
        Android:layout_height="match_parent"
        Android:layout_width="match_parent"
        style="@style/card_thumbnail_image"/>
</Android.support.v7.widget.CardView>

MainActivity.Java

 ImageView imageView = (ImageView) findViewById(R.id.card_thumbnail_image);
    Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.rose);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop){
        //Default 
        imageView.setBackgroundResource(R.drawable.rose);
    } else {
        //RoundCorners 
        RoundCornersDrawable round = new RoundCornersDrawable(mBitmap,
                getResources().getDimension(R.dimen.cardview_default_radius), 0); //or your custom radius

        CardView cardView = (CardView) findViewById(R.id.card_view);
        cardView.setPreventCornerOverlap(false); //it is very important

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
            imageView.setBackground(round);
        else
            imageView.setBackgroundDrawable(round);
    }

RoundCornersDrawable.Java

    public class RoundCornersDrawable extends Drawable {

    private final float mCornerRadius;
    private final RectF mRect = new RectF();
    //private final RectF mRectBottomR = new RectF();
    //private final RectF mRectBottomL = new RectF();
    private final BitmapShader mBitmapShader;
    private final Paint mPaint;
    private final int mMargin;

    public RoundCornersDrawable(Bitmap bitmap, float cornerRadius, int margin) {
        mCornerRadius = cornerRadius;

        mBitmapShader = new BitmapShader(bitmap,
                Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setShader(mBitmapShader);

        mMargin = margin;
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        super.onBoundsChange(bounds);
        mRect.set(mMargin, mMargin, bounds.width() - mMargin, bounds.height() - mMargin);
        //mRectBottomR.set( (bounds.width() -mMargin) / 2, (bounds.height() -mMargin)/ 2,bounds.width() - mMargin, bounds.height() - mMargin);
       // mRectBottomL.set( 0,  (bounds.height() -mMargin) / 2, (bounds.width() -mMargin)/ 2, bounds.height() - mMargin);
    }

    @Override
    public void draw(Canvas canvas) {
        canvas.drawRoundRect(mRect, mCornerRadius, mCornerRadius, mPaint);
        //canvas.drawRect(mRectBottomR, mPaint); //only bottom-right corner not rounded
        //canvas.drawRect(mRectBottomL, mPaint); //only bottom-left corner not rounded

    }

    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
        mPaint.setColorFilter(cf);
    }


}
0
Kumar Ajay A.K