Это то, что я сделал для подобной ситуации. В вашем макете вам нужно поставить оба вида один над другим (в точках, где они должны появиться). Добавьте глобальный приемник макетов в videoView/imageView один раз в onCreate, а затем просто измените видимость соответствующего представления. Этот код можно использовать повторно с помощью imageView, но имейте в виду, что вы не можете изменить видимость обоих представлений одновременно, потому что они будут перекрываться. Возможно, вам нужно дождаться, когда первая анимация исчезнет, а затем покажет следующую. Тебе решать.
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);
}
}
});
}