Ich ziehe meine Stimme über diese. Ich habe eine Hintergrund-Bitmap, die ich mit einer anderen Bitmap überlagern möchte, die transparente Ausschnitte hat. Ich habe kein Problem damit, wenn der Ausschnitt eine Grundform ist, aber ich brauche den Ausschnitt als Schnittpunkt zweier Kreise (eine Art Blattform). Ich habe versucht, eine dritte Bitmap zu erstellen, um eine Ausschnittsvorlage zu erstellen, aber ich kann nicht einmal eine saubere Darstellung des Ausschnitts erhalten, geschweige denn, dass er als Ausschnittvorlage funktioniert.Transparenz aus der Interstektion
Wer weiß, wie man so etwas macht? Hier ist mein (vereinfachte) Versuch:
@Override
public void draw(Canvas canvas) {
float w = canvas.getWidth();
float h = canvas.getHeight();
// just used to set some proportions
float off = 300f;
Paint paint = new Paint();
// make a background bitmap with a yellow to green gradient
Bitmap bitmapBkg = Bitmap.createBitmap((int) w, (int) h, Bitmap.Config.ARGB_8888);
Canvas canvasBkg = new Canvas(bitmapBkg);
paint.reset();
paint.setShader(new LinearGradient(0, h/2 - off, 0, h/2 + off, Color.YELLOW, Color.GREEN, Shader.TileMode.CLAMP));
canvasBkg.drawRect(new RectF(0, 0, w, h), paint);
// make an overlay bitmap with a red to magenta gradient which will have the cutouts
Bitmap bitmapOver = Bitmap.createBitmap((int) w, (int) h, Bitmap.Config.ARGB_8888);
Canvas canvasOver = new Canvas(bitmapOver);
paint.reset();
paint.setShader(new LinearGradient(0, h/2 - off, 0, h/2 + off, Color.RED, Color.MAGENTA, Shader.TileMode.CLAMP));
canvasOver.drawRect(new RectF(0, 0, w, h), paint);
// make a bitmap of intersecting circles to be used as the cutout shape
Bitmap bitmapCut = Bitmap.createBitmap((int) w, (int) h, Bitmap.Config.ARGB_8888);
Canvas canvasCut = new Canvas(bitmapCut);
paint.reset();
paint.setColor(Color.BLACK);
//paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR));
canvasCut.drawCircle(w/2 - (off/2), h/2, off, paint);
paint.reset();
paint.setColor(Color.BLACK);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR));
canvasCut.drawCircle(w/2 + (off/2), h/2, off, paint);
// apply cutout to overlay
paint.reset();
paint.setColor(Color.BLACK);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));
canvasOver.drawBitmap(bitmapCut, 0, 0, paint);
// draw background and overlay onto main canvas
paint.reset();
paint.setColor(Color.BLACK);
canvas.drawBitmap(bitmapBkg, 0, 0, paint);
canvas.drawBitmap(bitmapOver, 0, 0, paint);
}
Hier wird ein Bild von dem, was ich erhalte:
Was ich versuche, den äußeren Teil würde auch Rot-Magenta zu erhalten; nur die Augenform in der Mitte sollte gelbgrün sein.
Vielleicht die Bilder kombinieren, indem Sie PorterDuff ausnutzen? http://stackoverflow.com/questions/8280027/what-does-porterduff-mode-mean-in-android-graphics-what-does-it-do –
Das ist, was ich versucht habe zu verwenden. – trans
Und was ist schief gelaufen? –