59 votes

Positionner la vidéo dans une vue vidéo

J'ai donc étendu VideoView de onMeasure à l'échelle de la vidéo pour s'adapter à l'intérieur d'une vue plein écran.

voici comment:

public void setVideoAspect(int w,int h){
    wVideo=w;
    hVideo=h;
    onMeasure(w, h);
}
 @Override
 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
 {
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     if(wVideo!=0 && hVideo!=0)
     setMeasuredDimension(wVideo,hVideo);
 }

J'appelle setVideoAspect() avec l'affichage d'indicateurs (largeur, hauteur) de l'écran. Le problème est que cette méthode s'étend sur la vidéo pour s'adapter à l'intérieur de l'écran. Je veux être en mesure de garder le ratio d'aspect. (J'ai une vidéo 4:3 et 3:2 taille de l'écran.) J'ai utilisé le code suivant pour donner à la conservées des mesures de taux de la vue:

int height =  (int) (metrics.widthPixels*3/(float)4);
                        int width=  metrics.widthPixels;   
                        mVideoView.setVideoAspect(width,height);

Donc, de ce fait le travail, mais il y a un problème: il me donne une vidéo 4:3 avec la largeur de l'écran et des échelles de la hauteur correctement, mais il n'est pas le centre de la vidéo. (Il vient de cultures de la partie inférieure de la vidéo au lieu de le haut et le bas aussi.) J'ai une relative mise en page contenant le VideoView avec la gravité de la VideoView centre.

136voto

CameronW Points 1617

Essayez plutôt d’utiliser un FrameLayout. Je ne sais pas pourquoi, mais si j'utilise un code linéaire ou relatif dans mon code, il ne sera pas centré, mais Frame le fait. Voici le code XML qui adapte ma vidéo à l'écran, en préservant le rapport et en le centrant:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg">
<!-- Video player -->
<VideoView android:id="@+id/surface_view"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center">
</VideoView>
</FrameLayout>
 

14voto

frognosis Points 133

Afin de centrer la vidéo dans RelativeLayout, j'ai ajouté les deux layout_gravity="center" ad layout_centerInParent="true" . Cela fonctionne sur mon téléphone Android 4.3.

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <VideoView android:id="@+id/surface_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:layout_centerInParent="true" />
</RelativeLayout>
 

9voto

Hoven Points 53

La réponse de Cameron de manière programmatique (au cas où quelqu'un comme moi en aurait besoin) Ce code est à l'intérieur d'une création d'une activité dans mon code ('ceci' ci-dessous fait référence à l'activité)

     FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    FrameLayout fl = new FrameLayout(this);

    fl.setLayoutParams(lp);

    VideoView vv = new VideoView(this);

    FrameLayout.LayoutParams lp2 = new FrameLayout.LayoutParams(lp);

    lp2.gravity = Gravity.CENTER;

    vv.setLayoutParams(lp2);

    fl.addView(vv);

    setContentView(fl);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X