Ho un oggetto Bitmap e voglio renderlo su un oggetto Canvas con vari livelli di traslucenza (cioè rendere parzialmente visibile l'intera bitmap). Ad esempio, ho sprite in un gioco (disegnato sopra la parte superiore di uno sfondo bitmap) che voglio sfumare dall'essere opaco all'essere invisibile. Posso farlo senza dover ricorrere a OpenGL?Disegno di bitmap traslucidi con Canvas (Android)
risposta
Esame del documento di Android (che sembra basata su JSE con un'interfaccia grafica completamente alternativa), di seguito ti porterà un'immagine canale alfa di supporto:
Bitmap bmp=createBitmap(100,100,Bitmap.Config.ARGB_8888);
Finché la fonte bitmap è l'alfa supportando, dovresti essere in grado di dipingerlo su un'altra bitmap e avere i valori alpha onorati.
Per sfumare, è necessario colorare ripetutamente l'immagine con un ritardo adeguato (ma l'evento viene eseguito da un timer, non in un ciclo, a meno che il sistema di rendering di Android non sia molto diverso dagli altri Javas) che manipola il canale alfa per ogni pixel su ogni vernice successiva.
// Make image more transparent by 50%
int[] pxls=new int[100*100];
bmp.getPixels(pxls,0,100,0,0,100,100);
for(int xa=0,len=pxl.length; xa<len; xa++) {
int alp=(pxls[xa] & 0xFF000000);
alp<<1;
pxls[xa]=(alp | (pxls[xa] & 0x00FFFFFF);
}
bmp.setPixels(pxls,0,100,0,0,100,100);
Caveat 1: Ho scritto questo codice in-situ dal JavaDoc; non è stato compilato o testato
Avvertimento 2: Se la risoluzione del colore dispositivo hardware non supporta un canale alfa (comunemente noto come colore a 32 bit), verniciatura delle immagini nel sistema grafico sottostante possono semplicemente ignorare il canale alfa). Ma qualsiasi compositing fatto prima su un'immagine back-buffer dovrebbe essere rispettato. Il punto è che tu puoi avere per usare la pittura a doppio buffer per eseguire l'alfa blending pur essendo immune alle funzionalità/config del dispositivo sottostante.
Dovresti essere in grado di definire un'animazione di interpolazione e applicare tale animazione a un'immagine. La risorsa XML sarebbe simile al seguente (chiamato fade_animation.xml):
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="100" />
allora si caricherebbe e applicare questa animazione al tuo IMAGEVIEW personalizzato quando è pronto:
ImageView sprite = (ImageView) findViewById(R.id.sprite);
Animation animation = AnimationUtils.loadAnimation(this, R.anim.fade_animation);
sprite.startAnimation(animation);
Ci sono altre opzioni pure. Se si utilizza bitmap e non si vuole fare un'animazione, allora è possibile diminuire manualmente il valore alfa di ciascun fotogramma, un po 'come questo:
paint.setAlpha(100);
canvas.drawBitmap(spriteImage, left, top, paint);
Hai provato una di queste opzioni?
- 1. Bitmap Canvas Scaling Android
- 2. Disegno bitmap più veloce su canvas Android o OpenGL
- 3. Disegno in Java con Canvas
- 4. Salvataggio del canvas su bitmap su Android
- 5. Disegno bitmap affiancato con allineamento inferiore
- 6. Disegno Android con SurfaceView e Thread
- 7. Disegno a mano libera Disegno all'interno dell'area bitmap
- 8. Come aumentare le prestazioni del disegno bitmap su Android
- 9. Editor per canvas disegno
- 10. disegno 3D su Canvas con HTML + JS
- 11. Ruota bitmap su tela Android
- 12. Disegno su C# Bitmap con C++
- 13. Disegno bitmap ruotato con anti alias
- 14. Come rendere l'area di disegno Canvas trasparente in Android?
- 15. Android - Riempi bitmap con colore
- 16. Disegno di una GridView su una tela in Android
- 17. Disegno di archi perfettamente circolari con HTML5 Canvas + KineticJS
- 18. Disegnare una bitmap ridimensionata sull'area di disegno?
- 19. Disegno su canvas e oggetti pittura multipla
- 20. Unire due bitmap in Android
- 21. clearrect canvas, con alfa
- 22. PyGame: sprite traslucidi con pixel alfa
- 23. Errore di memoria bitmap esaurita in Android ...
- 24. Bitmap di ridisegno su Google Maps v2 per Android
- 25. crea Bitmap da byteArray in Android
- 26. Disegno di poligoni in XML con Android
- 27. rettangolo di disegno su tela Android
- 28. Disegno di testo su bitmap monocromatico in C#
- 29. Android - Canvas drawLine inside ImageView
- 30. Disegno Android su superficie e tela
Grazie per il codice. Conosco questo metodo ma eseguo il loop su alcuni folletti piccoli come questo ogni frame distruggerà il mio framerate. Ho scritto codice come questo prima ed è molto lento il looping e la manipolazione dei singoli pixel. Ci deve essere un modo più semplice perché diversi elementi della GUI hanno effetti di dissolvenza rapida. – wordyword