я сталкиваюсь с той же проблемой в последнее время, используя setAnchorView (VideoView) будет установлен контроллер полностью под VideoView вместо зависания в нижней части документа. Мой VideoView - один третий экран в верхней области, поэтому контроллер в конечном итоге покрывает любой вид в VideoView.
Ниже, как я в конечном итоге делаю это без написания полномасштабного пользовательского контроллера (только переопределение onSizeChanged
из MediaController для перемещения якоря вверх):
Использование FrameLayout в качестве якоря для MediaContoller, завернуть вместе с VideoView как показано ниже:
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.3"
android:layout_gravity="center"
android:background="#000000">
<VideoView
android:id="@+id/videoView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
<FrameLayout android:id="@+id/controllerAnchor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
Создание пользовательских MediaController, которые будут двигаться FrameLayout вверх (с MediaController, что привязывается к нему будет следовать), когда его размер изменен:
public class MyMediaController extends MediaController
{
private FrameLayout anchorView;
public MyMediaController(Context context, FrameLayout anchorView)
{
super(context);
this.anchorView = anchorView;
}
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
super.onSizeChanged(xNew, yNew, xOld, yOld);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) anchorView.getLayoutParams();
lp.setMargins(0, 0, 0, yNew);
anchorView.setLayoutParams(lp);
anchorView.requestLayout();
}
}
Используйте собственный контроллер выше вместо стандартного, а затем привязать его к FrameLayout:
protected void onCreate(Bundle savedInstanceState)
{
//...
videoView = (VideoView) findViewById(R.id.videoView1);
videoController = new MyMediaController(this, (FrameLayout) findViewById(R.id.controllerAnchor));
videoView.setMediaController(videoController);
//...
}
public void onPrepared(MediaPlayer mp)
{
videoView.start();
FrameLayout controllerAnchor = (FrameLayout) findViewById(R.id.controllerAnchor);
videoController.setAnchorView(controllerAnchor);
}
Я заинтересован в этом, а также. Вы когда-нибудь это выясняли? – Ronnie
Нет, я никогда этого не делал. –
Посмотрите на этот вопрос http://stackoverflow.com/questions/6093756/how-to-re-position-mediacontroller – Sandeep