Dessin LinearLayout avec coins arrondis
Je suis en train de mettre en œuvre un LinearLayout sous-classe qui se dessine, avec des coins arrondis. Au cours de ma recherche, j'ai mis setWillNotDraw(false)
et remplacé onDraw()
pour dessiner un rectangle arrondi dans la toile:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int sc = canvas.saveLayer(0, 0, getWidth(), getHeight(), drawPaint, Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
canvas.drawRoundRect(bounds, mCornerRadius, mCornerRadius, roundPaint);
canvas.restoreToCount(sc);
}
où:
drawPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
drawPaint.setColor(0xffffffff);
drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
roundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
roundPaint.setColor(0xffffffff);
DST_IN
semble la bonne option ici (en fonction de la APIDemos exemple), mais la zone qui doit être transparente (arrondi) a en revanche un fond noir, et les coins de la les enfants sont encore visibles. C'est le résultat sur un Galaxy Nexus avec Android 4.2.2:
Un indice?
EDIT: Voici ce que j'aimerais atteindre, désolé pour la grossièreté de photoshopping 🙂
EDIT 2: j'ai ajouté à GitHub un exemple praticable projet: https://github.com/venator85/RoundClippingLayout
Merci 😉
source d'informationauteur Venator85
Vous devez vous connecter pour publier un commentaire.
Pas tout à fait la même :
Romain Guy a fait un billet de blog sur le recadrage des coins sur les images bitmap à l'aide de shaders.. Pas sûr que si vous souhaitez étendre la même chose.
http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners/
Essayer cela,
Mise en page:-
Forme(Drawable):-rounded_edge.xml
Comment sur...
Alors...
my_rounded_drawable.xml
Je pouvais parvenir à un LinearLayout avec des coins arrondis comme ça.
Étapes:
1. Créer une mise en page personnalisée
2. L'utiliser dans la page principale comme ce
Essayer !!
prises à partir de ce post
Ajouter le texte suivant dans un fichier (disons customshape.xml) et ensuite le placer dans (res/drawable/customshape.xml)
Une fois que vous avez terminé avec la création de ce fichier, il suffit de définir l'arrière-plan de l'une des manières suivantes:
À L'Aide De Code:
Ou via un fichier XML, il suffit d'ajouter l'attribut suivant le conteneur (ex: LinearLayout ou à des champs):
Au lieu d'essayer de couper les coins hors de votre mise en page, pourquoi ne pas placer un Drawable sur le dessus comme une sorte de cadre qui correspond à la couleur de votre arrière-plan?
[EDIT: il semble bien que ce sera ajouté dans L: https://developer.android.com/preview/material/views-shadows.html#clipqui permet de découper une vue à la forme d'un rectanglular, circulaire, rond ou rectangulaire drawable.]
J'ai juste essayé pour un très long temps de faire moi-même, et est venu sur cette réponse qui suggère qu'il n'est pas possible, car la Vue de classe est basée sur la classe Rect. Je viens de vérifier la source et d'après les commentaires, on dirait que c'est encore le cas.
Motorola est la libération de la Moto 360 (Android Porter la montre avec un visage rond) plus tard cet été, donc il y aura peut-être des mises à jour du cadre qui permettent de Vues avec des formes autres que des rectangles.