Je rencontre le même problème récemment, à l'aide de setAnchorView(videoView) va mettre le contrôleur sous VideoView plutôt planant sur la zone de fond d'elle. Mon VideoView est un tiers de l'écran dans la zone supérieure, de sorte que le contrôleur finissent par couvrir tout ce point de Vue sous VideoView.
Ci-dessous est la façon dont je le faire sans avoir à écrire de plein fouet l'personnalisé contrôleur (seulement primordial onSizeChanged
de MediaController pour déplacer l'ancre vers le haut) :
Utilisation FrameLayout comme un point d'ancrage pour MediaContoller, l'envelopper avec VideoView comme ci-dessous :
<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>
Créer des MediaController qui se déplacera FrameLayout (avec MediaController qui est ancrée à il va suivre) lorsque sa taille a changé :
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();
}
}
Utiliser l'outil de contrôleur ci-dessus à la place de la norme, puis fixez-le au 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);
}