2016-12-21 4 views
1

Ich möchte Animate auf VideoView verwenden, die über dem ImageView und RecyclerView ist. Zuerst ist die Sichtbarkeit von videoView verschwunden und wenn ich auf das Element in der recyclerView klicke, möchte ich videoView sichtbar machen, während die Animation nach unten rutscht und auch animation zum imageView verwendet, um slideUp zu machen und es zu verlassen. Wie kann ich das machen. Ich habe den Schnappschuss von vorher und nachher des Layouts gegeben.Wie animiere ich VideoView zusammen mit dem ImageView und RecyclerView?

Vor Animation:

Before Animation

Nach Animation:

After Animation

Antwort

1

Dies ist, was ich für eine ähnliche Situation getan haben. In Ihrem Layout müssen Sie beide Ansichten übereinander legen (genau an den Stellen, an denen sie erscheinen sollen). Fügen Sie in onCreate einmal den globalen Layout-Listener zur videoView/imageView hinzu und ändern Sie dann einfach die Sichtbarkeit der entsprechenden Ansicht. Dieser Code könnte mit der imageView wiederverwendet werden, aber bedenken Sie, dass Sie die Sichtbarkeit beider Ansichten nicht gleichzeitig ändern können, da sie sich überschneiden. Vielleicht müssen Sie warten, bis die erste Animation startet und dann die nächste anzeigen. Es liegt an dir.

private static final int ANIMATION_DURATION = 350; 

private void addVideoViewAnimation(final View videoView) { 
    videoView.setTag(videoView.getVisibility()); 
    videoView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      int newVisibility = videoView.getVisibility(); 
      if ((int) videoView.getTag() != newVisibility) { 
       videoView.setTag(newVisibility); 

       TranslateAnimation animation; 
       if (newVisibility == View.VISIBLE) { 
        animation = new TranslateAnimation(0, 0, -videoView.getHeight(), 0); 
        animation.setInterpolator(new DecelerateInterpolator()); 
       } else { 
        animation = new TranslateAnimation(0, 0, 0, -videoView.getHeight()); 
        animation.setInterpolator(new AccelerateInterpolator()); 
       } 
       animation.setDuration(ANIMATION_DURATION); 
       videoView.startAnimation(animation); 
      } 
     } 
    }); 
} 
Verwandte Themen