MediaController 不尊重视图的动画

MediaController doesn't respect view's animation

问题说明了一切,MediaController 不跟随应用于视图的动画。

我有一个 RelativeLayout,里面有一个 VideoView。 MediaController 锚定到此 VideoView。现在,在 activity 中,我用一些动画(比如从右到左)将相对布局带到屏幕上。布局中的所有内容,如 textview,videoview 都可以完美地进行动画处理,但 MediaController 却没有。它不是与 VideoView 一起从右到左出现,而是出现在屏幕之间,而 VideoView 仍然从右到左出现。

有没有办法强制将动画应用到 MediaController。

最小结构 ->

RelativeLayout
|
|--- TextView
|--- VideoView + MediaController
|--- Some other view

我在相关布局上应用动画。

rtlAnim = AnimationUtils.loadAnimation(activity, R.anim.right_to_left);
relativeLayout.startAnimation(rtlAnim);

right_to_left.xml :

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0"
        android:duration="500"/>
</set>

任何帮助将不胜感激。

PS :一旦 videoview 准备好,我就会显示媒体控制器。

videoView.setOnPreparedListener(mediaPlayer -> mediaController.show());

使用 here 中的以下代码解决了它。由于 mediaController 将控件放置在浮动 window 中,因此我们必须手动将其添加到视图层次结构中。 :

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    videoView.setMediaController(ctrl);
                    ctrl.show();
                    FrameLayout frameLayout = (FrameLayout) ctrl.getParent();
                    ((ViewGroup) frameLayout.getParent()).removeView(frameLayout);
                    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                    params.addRule(ALIGN_BOTTOM, videoView.getId());
                    ((RelativeLayout) videoView.getParent()).addView(frameLayout, params);
                }
            });