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.
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
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"
>
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>
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" />
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
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>
Ja, ich habe es erreicht, indem ich die Hälfte des CardCornerRadius auf die Höhe seiner Ansicht reduzierte.
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);
}
}