Comment dessiner un rectangle transparent que l'intérieur de la région?
Je veux tracer un rectangle au centre de la vue comme cette image .Pour cela, je suis en utilisant le code suivant
public class TransparentView extends View {
public TransparentView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public TransparentView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TransparentView(Context context) {
super(context);
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
canvas.drawColor(Color.parseColor("#60000000"));
Paint borderPaint = new Paint();
borderPaint.setARGB(255, 255, 128, 0);
borderPaint.setStyle(Paint.Style.STROKE);
borderPaint.setStrokeWidth(4);
Paint innerPaint = new Paint();
innerPaint.setARGB(0, 0, 0, 0);
innerPaint.setAlpha(0);
innerPaint.setStyle(Paint.Style.FILL);
RectF drawRect = new RectF();
drawRect.set(100, 100, 100,100);
canvas.drawRect(drawRect, innerPaint);
canvas.drawRect(drawRect, borderPaint);
}
}
Comment puis-je faire de la transparence à l'intérieur du rectangle et les pauvres transparente à l'extérieur de la région?
- il n'y a aucun point en remplissant le milieu avec un alpha 0 couleur. Il suffit de dessiner le contour extérieur et c'est tout
Vous devez vous connecter pour publier un commentaire.
Suffit d'utiliser
au lieu de
Utilisation
Path
et ajouter deuxRect
s, une pour la Vue complète de la zone et pour la “sélection”. Définir le Chemin d'accès fillType à EVEN_ODD. Maintenant la remplir avec des demi-transparente de couleur.Noter que pour de meilleures performances, vous ne devez pas créer des Peintures et des Chemins d'accès dans onPaint(). Je suggère onSizeChanged() est de mieux pour cela.
Je me suis séparé de l'image dans 5 rectangles.
La principale est la transparence, c'est au milieu de la figure. Les 4 autres seront semi-transparent.
Après que, à l'intérieur de onDraw(Canvas canvas), j'ai peint sur les 4 rectangles avec un semi-transparente de couleur.
Voici le code que j'ai utilisé.
Qui peuvent travailler pour vous.
Aussi, vous ne demandez pas les frontières, mais sur votre extrait de code, j'ai vu que vous l'avez appelé toile.drawRect(drawRect, borderPaint); sorcière me fait croire que vous aussi souhaitez dessiner, donc je vais coller ici le code que j'ai utilisé pour tracer les frontières:
Vous pouvez faire usage de
setXfermode()
de Peinture et passerPorterDuff.Mode.ADD
etPorterDuff.Mode.ADD
comme paramètre afin d'obtenir la transparence intérieure de la région.J'ai cité l'exemple ci-dessous qui contient un rectangle transparent à l'intérieur d'un autre rectangle, qui montrent comment elle peut être mise en œuvre dans Android.
Veuillez Noter: Vous pouvez modifier les valeurs à l'intérieur
drawRect()
en fonction de vos besoins.