これは私が似たような状況のためにやっていることです。レイアウトでは、両方のビューを上下に配置する必要があります(正確な場所に表示する必要があります)。 onCreateでグローバルレイアウトリスナーをvideoView/imageViewに一度追加してから、そのビューの表示を変更するだけです。このコードは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);
}
}
});
}