Dessin sur toile - PorterDuff.Mode.CLEAR dessine du noir! Pourquoi?
Je suis en train de créer une Vue personnalisée qui fonctionne simple: il s'agit d'une image Bitmap qui est révélé par une trajectoire en arc - de 0deg à 360deg. Les degrés sont en train de changer avec quelques FPS.
Donc j'ai fait un Affichage personnalisé avec substituée onDraw()
méthode:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
canvas.drawArc(arcRectF, -90, currentAngleSweep, true, arcPaint);
arcPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, circleSourceRect, circleDestRect, arcPaint);
}
arcPaint
est initialisé de la façon suivante:
arcPaint = new Paint();
arcPaint.setAntiAlias(true);
arcPaint.setColor(Color.RED); //Color doesn't matter
Maintenant, tout ce qui dessine très bien, mais... le fond est NOIR, en tout point de Vue.
Si j'ai mis canvas.drawColor(..., PorterDuff.Mode.DST)
et omettre canvas.drawBitmap()
- l'arc est dessiné correctement sur le fond transparent.
Ma question est - comment mettre en PorterDuff
modes pour le faire fonctionner avec la transparence?
Bien sûr bitmap
est PNG 32 bits avec canal alpha.
source d'informationauteur cadavre
Vous devez vous connecter pour publier un commentaire.
PorterDuff.Mode.CLEAR
ne fonctionne pas avec l'accélération matérielle. Juste mettreFonctionne parfaitement pour moi.
Utiliser cette déclaration lors de l'initialisation de la vue
Tout est ok dans votre code, sauf une chose: vous obtenez un fond noir parce que votre fenêtre est opaque. Pour atteindre transparente résultats, vous devez tirer sur une autre image. Dans votre méthode onDraw merci de créer un nouveau bitmap et faire tout le personnel. Après que dessiner cette image sur votre toile.
Pour plus de détails et des exemples de code, veuillez lire cette ma réponse:
Si vous avez de solide de couleur d'arrière-plan tout ce que vous devez faire est de définir la couleur de la Peinture de votre couleur d'arrière-plan. Par exemple, si vous avez un fond blanc, vous pouvez le faire:
Toutefois, si vous avez besoin d'effacer une ligne avec un fond transparent, vous essayez ceci:
Afin de dessiner avec une couleur transparente, vous devez utiliser de la Peinture setXfermode qui ne fonctionne que si vous définissez une image à votre toile. Si vous suivez les étapes ci-dessous, vous devriez obtenir le résultat souhaité.
Créer une toile et de définir ses bitmap.
Maintenant, vous devriez être en mesure de dessiner avec une couleur de transparence de l'aide: