Cum de a face layout-ul cu colțuri rotunjite..?

Cum pot face un aspect cu colturi rotunjite? Vreau să se aplice colturi rotunjite pentru a-mi LinearLayout.

Comentarii la întrebare (4)
Soluția

1: Defini layout_bg.xml în drawables:

<?xml version="1.0" encoding="UTF-8"?>





2: Adauga layout_bg.xml ca fundal pentru layout

android:background="@drawable/layout_bg"
Comentarii (15)

Pentru API 21+, Utilizați Clip Views

Rotunjite conturul de decupare a fost adăugat la "Vedere", în clasa API 21. Vezi asta formare doc sau asta referință pentru mai multe informații.

Această în-a construit caracteristică face colțuri rotunjite foarte ușor să pună în aplicare. Acesta funcționează pe orice ecran sau layout și sprijină buna de tăiere.

Aici's Ce Sa Fac:

  • Creați o formă rotunjită drawable și setați-o ca a vizualiza's de fundal: android:background="@drawable/round_outline"`
  • În conformitate cu documentația, atunci tot ce trebuie să faci este aceasta: android:clipToOutline="adevărat"`

Din păcate, nu pare a fi un bug]3 și acest atribut XML în prezent nu este recunoscut. Din fericire, putem seta tăiere în Java:

  • În activitate sau fragment: Vedere.setClipToOutline(adevărat)

Ceea Ce Se Pare Ca:

Notă Specială Despre ImageViews

setClipToOutline() funcționează numai atunci când punctul de Vedere's de fundal este setată la o forma drawable. Dacă acest context formă există, Vedere tratează fundal's schiță ca frontierele pentru tăiere și umbrire scopuri.

Acest lucru înseamnă că, dacă doriți pentru a rotunji colturile pe un ImageView cu setClipToOutline(), imaginea ta trebuie să vină de la android:src "în loc de" android:fond (din fundal este folosit pentru a forma rotunjită). Dacă TREBUIE să utilizați de fundal pentru a seta imaginea ta în loc de src, puteți utiliza această imbricate vedere soluție:

  • A crea un exterior aspect cu trecutul său set la forma drawable
  • Wrap că layout jurul ImageView (fără umplutură)
  • ImageView (inclusiv orice altceva în layout) vor fi tăiate la exterior layout's rotunjite forma.
Comentarii (9)

Aici's o copie a unui fișier XML pentru a crea un drawable, cu un fundal alb, chenar negru și colțuri rotunjite:

 <?xml version="1.0" encoding="UTF-8"?> 








salvați-l ca un fișier xml în drawable director, Folositi-l ca tine ar folosi orice drawable fundal(pictograma sau resource file) folosind numele resursei (R. drawable.your_xml_name)

Comentarii (5)

Utilizarea CardView în android v7 support library. Deși l's un pic greu, rezolvă problema, și destul de ușor. Nu ca set drawable fundal metodă, s-ar putea clip subviews cu succes.

<?xml version="1.0" encoding="utf-8"?>


Comentarii (1)

Am făcut așa:

Verificați Screenshot:

Crea drawable fișier numit cu custom_rectangle.xml` în drawable folder:

<?xml version="1.0" encoding="utf-8"?>








Aplica acum Dreptunghi de fundal pe Vezi:

mView.setBackground(R.drawlable.custom_rectangle);

Facut

Comentarii (1)

Cred că o modalitate mai bună de a face asta este de a merge de 2 lucruri:

  1. face un bitmap de layout-ul, așa cum se arată [aici][1].

  2. face o rotunjire drawable din bitmap, așa cum se arată [aici][2]

  3. setați drawable pe un imageView.

Aceasta se va ocupa de cazuri în care alte soluții nu au reușit să rezolve, cum ar fi având un conținut care are colțuri.

Cred că's, de asemenea, un pic mai mult GPU-friendly, cum se prezinta un singur strat în loc de 2 .

Singura modalitate mai bună este de a face un complet personalizate vedere, dar care's o mulțime de cod și poate lua o mulțime de timp. Cred că ceea ce am sugerat aici este cel mai bun din ambele lumi.

Aici's un fragment de cum se poate face:

RoundedCornersDrawable.java

/**
 * shows a bitmap as if it had rounded corners. based on :
 * http://rahulswackyworld.blogspot.co.il/2013/04/android-drawables-with-rounded_7.html
 * easy alternative from support library: RoundedBitmapDrawableFactory.create( ...) ; 
 */
public class RoundedCornersDrawable extends BitmapDrawable {

    private final BitmapShader bitmapShader;
    private final Paint p;
    private final RectF rect;
    private final float borderRadius;

    public RoundedCornersDrawable(final Resources resources, final Bitmap bitmap, final float borderRadius) {
        super(resources, bitmap);
        bitmapShader = new BitmapShader(getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        final Bitmap b = getBitmap();
        p = getPaint();
        p.setAntiAlias(true);
        p.setShader(bitmapShader);
        final int w = b.getWidth(), h = b.getHeight();
        rect = new RectF(0, 0, w, h);
        this.borderRadius = borderRadius < 0 ? 0.15f * Math.min(w, h) : borderRadius;
    }

    @Override
    public void draw(final Canvas canvas) {
        canvas.drawRoundRect(rect, borderRadius, borderRadius, p);
    }
}

CustomView.java


public class CustomView extends ImageView {
    private View mMainContainer;
    private boolean mIsDirty=false;

    // TODO for each change of views/content, set mIsDirty to true and call invalidate

    @Override
    protected void onDraw(final Canvas canvas) {
        if (mIsDirty) {
            mIsDirty = false;
            drawContent();
            return;
        }
        super.onDraw(canvas);
    }

    /**
     * draws the view's content to a bitmap. code based on :
     * http://nadavfima.com/android-snippet-inflate-a-layout-draw-to-a-bitmap/
     */
    public static Bitmap drawToBitmap(final View viewToDrawFrom, final int width, final int height) {
        // Create a new bitmap and a new canvas using that bitmap
        final Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(bmp);
        viewToDrawFrom.setDrawingCacheEnabled(true);
        // Supply measurements
        viewToDrawFrom.measure(MeasureSpec.makeMeasureSpec(canvas.getWidth(), MeasureSpec.EXACTLY),
                MeasureSpec.makeMeasureSpec(canvas.getHeight(), MeasureSpec.EXACTLY));
        // Apply the measures so the layout would resize before drawing.
        viewToDrawFrom.layout(0, 0, viewToDrawFrom.getMeasuredWidth(), viewToDrawFrom.getMeasuredHeight());
        // and now the bmp object will actually contain the requested layout
        canvas.drawBitmap(viewToDrawFrom.getDrawingCache(), 0, 0, new Paint());
        return bmp;
    }

    private void drawContent() {
        if (getMeasuredWidth() 
Comentarii (9)

Încercați acest...

1.crea drawable xml(custom_layout.xml):

<?xml version="1.0" encoding="utf-8"?>








2.adauga opinia dumneavoastră fundal

android:background="@drawable/custom_layout"
Comentarii (1)

Dacă doriți pentru a face aspectul rotunjit, cel mai bine este să utilizați CardView, aceasta a oferit mai multe caracteristici pentru a face un design frumos.






Cu acest card_view:cardCornerRadius="5dp", puteți modifica raza.

Comentarii (0)

Funcție pentru a seta raza de colț programatic

static void setCornerRadius(GradientDrawable drawable, float topLeft,
        float topRight, float bottomRight, float bottomLeft) {
    drawable.setCornerRadii(new float[] { topLeft, topLeft, topRight, topRight,
            bottomRight, bottomRight, bottomLeft, bottomLeft });
}

static void setCornerRadius(GradientDrawable drawable, float radius) {
    drawable.setCornerRadius(radius);
}

Folosind

GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setColor(Color.GREEN);
setCornerRadius(gradientDrawable, 20f);
//or setCornerRadius(gradientDrawable, 20f, 40f, 60f, 80f); 

view.setBackground(gradientDrawable);
Comentarii (0)

Un mod mai bun de a face aceasta ar fi:

background_activity.xml

<?xml version="1.0" encoding="UTF-8"?>











Acest lucru va lucra de mai jos API 21 de asemenea, și-ți dau ceva de genul asta:


Dacă sunteți dispuși să facă un pic mai mult efort, mai bine de control, apoi folosesc android.sprijin.v7.widget.CardViewcucardCornerRadiusatribut (și a stabilitaltitudineatribut0dp` pentru a scăpa de orice însoțire drop shadow cu cardView). De asemenea, acest lucru va funcționa la nivel de API 15.

Comentarii (4)

Utilizarea CardView pentru a obține margini rotunjite pentru orice machete. Utilizare card_view:cardCornerRadius="5dp" pentru cardview pentru a obține rotunjite layout margini.











Comentarii (1)

Cea mai bună și mai simplă metodă ar fi de a utiliza card_background drawable în layout. Aceasta urmează, de asemenea, Google's liniile directoare de proiectare materiale. Doar includ asta în tine LinearLayout:

android:background="@drawable/card_background"

Adăugați acest la drawable directorul și numele card_background.xml:

<?xml version="1.0" encoding="utf-8"?>















Comentarii (0)
<?xml version="1.0" encoding="UTF-8"?>





@David, pune umplutură aceeași valoare ca și accident vascular cerebral, atât de frontieră pot fi vizibile, regardeless dimensiunea imaginii

Comentarii (0)

Am'am luat @gauravsapiens răspuns cu comentariile mele de interior pentru a oferi un reținerea de ce parametri vor afecta.

<?xml version="1.0" encoding="utf-8"?>














Daca're în căutarea doar pentru a crea o forma care runde colțuri, eliminarea umplutură și accident vascular cerebral va face. Dacă scoateți solid precum va fi, în fapt, au creat colturi rotunjite pe un fundal transparent.

De dragul de a fi leneș, am creat o formă de dedesubt, care este doar un solid fundal alb, cu colțuri rotunjite - bucurați-vă! :)

<?xml version="1.0" encoding="utf-8"?>








Comentarii (0)

Creați-vă xml în drawable, layout_background.xml

 <?xml version="1.0" encoding="utf-8"?>





și apoi, trebuie să adăugați această în layout.xml

 android:background="@drawable/layout_background"
Comentarii (1)




</formă>

Comentarii (0)