Când scrieți o aplicație, vreau ca utilizatorul să se bucure de lucrul cu acesta. Utilizatorul iubește când aplicația se comportă predictabil și natural. Recent, într-unul dintre proiectele mele de hobby, sarcina a început să schimbe forma unei componente în alta. În Swing, aceasta se face destul de simplu, cel mai important, nu uita sa suni revalidare, dar efectele sunt, uneori, foarte amuzant. Decizia "pe frunte" va ieși vizibil, nu foarte plăcută. O componentă se depărtează drastic, al doilea apare brusc de nicăieri. Nu există nicio legătură vizuală între ele. Acest comportament este nefiresc, iar astfel de efecte în aplicațiile Rich ar trebui să fie evitate.
Iată o soluție relativ simplă, dar mai interesantă pentru aceeași problemă.
Componenta nu dispare imediat, dar devine mai întunecată și își pierde claritatea (efectul de estompare). Astfel că utilizatorul înțelege că nu mai puteți lucra cu el. Apoi, din sub componenta "veche", apare treptat un nou.
Nu voi descrie toate detaliile implementării: codul sursă va spune totul pentru mine. Pe scurt, acest lucru se întâmplă atunci când utilizatorul face clic pe butonul "Test Fade".
Mai întâi, creați o BufferedImage dimensiunea componentei sursă (am un tabel). Apoi, componenta este desenată în imagine. Deci, avem o "captură de ecran" a componentei. Imaginea este procesată de filtrul Gaussian Blur (am împrumutat codul pentru crearea kernel-ului de conversie de la clienții Rich Rich). Imaginea devine neclară.
Când imaginea este gata, înlocuim componenta reală cu o imagine. Sub captura de ecran, este pusă componenta "țintă" (cea care trebuie afișată). Apoi, folosind compozitul alfa Clear "gnaw" cercurile din imagine. In paralel, „Darken“ brown imagine (din nou, folosind compozit alfa, de data aceasta SrcOver).
Așa apare efectul dorit. Folosind aceeași tehnică, puteți obține alte efecte interesante, de exemplu, dacă vom crește transparența la fiecare pas al imaginii, în loc de cercuri „vygryzaniya“, puteți obține un fade-in clasic fade-out.
P.S. Am luat primele componente care au venit. Nu acordați atenție funcționalității acestora.