2017-12-02 14 views
0

In meiner Haupttätigkeit habe ich 2 ImageView Ansichten mit OnLongClickListener Ansichten angelegt, die an sie gebunden sind. Jetzt möchte ich die Animation eines transparenten roten Kreises hinzufügen, der sich von der Mitte dieser Ansichten aus erstreckt, während das Ereignis stattfindet.Erweiterung der transparenten Kreisanimation auf einem LongClickListener-Ereignis

Ich habe auch OnTouchListener Ereignisse in den Ansichten MotionEvent.ACTION_UP Feld hinzugefügt, um die Freigabe des Klicks für andere Funktionen zu erkennen, ich erwarte, dass dies verwendet wird, um den Kreis sofort verschwinden zu lassen, wenn der Klick freigegeben wird.

Wenn also der Benutzer auf die Ansicht klickt und sie hält, beginnt der Kreis sich langsam zu animieren und verschwindet, wenn er loslässt.

Wie würde ich das machen? Es war zu spezifisch, um selbst etwas zu finden, also musste ich fragen.

Antwort

0

Ich habe etwas graben und fand eine einfache Lösung mit den animate().scaleXBy und animate().scaleYBy Methoden.

ivRedCircle2.setVisibility(View.VISIBLE); 
ivRedCircle1.animate().scaleXBy(4).setDuration(2500); 
ivRedCircle1.animate().scaleYBy(4).setDuration(2500); 

ivRedCircle1 ist ein Verweis auf eine der Ansichten, auf die ich diese Animation anwenden möchten. Um genau zu sein, ist dies das Bild eines roten Kreises, der auf einem anderen ImageView platziert ist. Wenn das Ereignis onLongClick ausgelöst wird, wird das Bild zunächst unsichtbar angezeigt. Anschließend wird das Bild 4 Mal vergrößert angezeigt. 2500 ist die Dauer von 2500 Millisekunden oder 2,5 Sekunden, so lange dauert es, bis die Größe 4 mal wächst.

Danach, in der onTouchListener Ereignis, wenn die MotionEvent.ACTION_UP ausgelöst wird, habe ich dieses Stück Code hinzugefügt, damit es zurückziehen und verschwinden mit der setVisibility(View.INVISIBLE) Methode.

ivRedCircle1.animate().scaleXBy(-4).setDuration(1000); 
ivRedCircle1.animate().scaleYBy(-4).setDuration(1000); 
final Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     ivRedCircle1.setVisibility(View.INVISIBLE); 
    } 
}, 1000); 

Es ist wichtig, setVisibility innerhalb des run() Methode mit der Verzögerung genau auf die Dauer der Animation zu platzieren, um sie verschwinden zu lassen, wie es auf seine ursprüngliche Größe zurückzieht.

Verwandte Themen