Android - Fade-out " bitmap-Bild auf Leinwand
Ich bin Zeichnung eine bitmap skaliert auf eine Leinwand und möchte zu verblassen, mein Bild zu einem bestimmten Zeitpunkt.
Grundsätzlich, wenn mein Charakter Bild geht über einen bestimmten Abschnitt der Leinwand, ich verlange, dass das Zeichen, langsam zu verblassen (3 Sekunden), bevor die Seite automatisch re-leitet, um die nächste java-Klasse.
Derzeit ist mein Bild einfach nur Weiterleitungen auf die neue java-Klasse, bitte sehen Sie unten einige code-wie erstelle ich mein Bild.
Resources res = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, res.getDisplayMetrics());
imgSpacing = (int) px / 2;
int size = (int) ((PhoneWidth / 5) - px);
chrImg = BitmapFactory.decodeResource(getResources(), R.drawable.character);
chrImg = Bitmap.createScaledBitmap(chrImg, size, size, true);
Dann innerhalb der Leinwand onDraw:
if(indexX == mazeFinishX && indexY == mazeFinishY)
{
canvas.drawBitmap(finish, j * totalCellWidth, i * totalCellHeight, null);
//As soon as the character moves over this square they are automatically re-directed to new page
//This is where I want to fade the character image out before the re-direct
}
Ich habe online geschaut, aber nicht so Recht geklappt, wie man das ausbleichen zu arbeiten, für meine drawable Bild geholt von meinen spielen, die Ressourcen-drawable-Ordner. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie denken, es ist eine Möglichkeit, Sie wollen, ändern Sie die fade-animation die Straße hinunter, wie skalieren und/oder drehen, dann sollten Sie gehen mit einer animation in XML.
Aber nur für eine schnelle bitmap fade, können Sie immer wieder post verzögert Aufhebungs-Nachrichten. Sie wollen wahrscheinlich begrenzen Sie Ihre für ungültig erklärt Gegend, wo dein Charakter bitmap:
Ich würde empfehlen, die Konstanten FADE_MILLISECONDS und FADE_STEP in res/integers.xml nur, damit Sie nicht hart codiert.
Den besten Weg für mich zu erklären, das ist eine vollständige benutzerdefinierte Ansicht, dass Sie beispielsweise ziehen die Stücke aus, die Sie benötigen. Unten ist eine Ansicht, die das leistet dieses.
Der effizienteste Weg, um dynamisch ändern Sie die Transparenz von dem, was Sie zeichnen, wird es auch anwenden mit einem
Paint
Zeichnung bis zu IhrerCanvas
. Sie müssen ständiginvalidate()
die Ansicht, die mit jedem Bild Umschalten, um die animation anzuzeigen, bis das Zeichen Weg ist. Das Beispiel verwendet eineAnimation
Objekt und einTransformation
Objekt mit all den timing-Mathematik, um die animation wirklich gut Aussehen.Die Kernaussage hier ist, dass Sie starten Sie die animation durch einen externen trigger (ich würde nicht empfehlen, tun das überprüfen, denn wenn fade out in
onDraw()
wahrscheinlich besser in den Ort, wo diese Zeichen Standorte aktualisiert werden. In meinem Beispiel, der Einfachheit halber, ich habe diese, wenn die Ansicht berührt.Dieser trigger startet die animation und erhält die Initiale transformation Wert, dann
invalidate()
löst eine neueonDraw()
. Während die animation läuft,onDraw()
wiederholt aufgrund derinvalidate()
und jede iteration der alpha auf den Lack leicht abnimmt.Wenn die animation fertig ist, wird Sie rufen den
AnimationListener
für Sie, so können Sie auslösen des screen-übergang innerhalb deronAnimationEnd()
.dadurch wird die bitmap transparent wird ( die alpha 100 ) .. und dann umleiten auf die nächste Klasse nach 3 Sekunden.
Update:
für das bitmap, das Sie nicht verwenden können .setAlpha also wir müssen eine Farbe, so haben wir eine neue Farbe jedes mal, wenn dann die bitmap mit der Farbe. aber wenn Sie eine Bildansicht, die Sie verwenden können .setalpha