2012-05-17 14 views
15

Actualmente estoy tratando de implementar una videoview que mostrará un video en una posición específica. Puedo mostrar un video a pantalla completa sin problema. Sin embargo, cada vez que intento mostrar ese video dentro de un marco (un pequeño rectángulo, por ejemplo) solo puedo mostrar una parte del video en esa vista. No pude adaptar el video a esa vista.¿Cómo puedo ver un video dentro de una vista de video en una posición específica?

Ya busco muchos enlaces sobre escalar un video en Android, sin embargo, no pude encontrar ninguna forma de hacerlo. Cualquier ayuda sobre ese tema será útil.

Lo que estoy usando es que tengo 2 clases diferentes. Uno de ellos es mi clase de actividad de video y otro es una clase de ayuda:

public class VideoViewCustom extends VideoView { 
    private int mForceHeight = 0; 
    private int mForceWidth = 0; 
    public VideoViewCustom(Context context) { 
     super(context); 
    }  
    public VideoViewCustom(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public VideoViewCustom(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setDimensions(int w, int h) { 
     this.mForceHeight = h; 
     this.mForceWidth = w; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(mForceWidth, mForceHeight); 
    } 
} 

Esa clase me ayude a ajustar correctamente las dimensiones de VideoView, sin embargo, no pude hacer que el vídeo se encuentran en esa región. Quiero decir que no pude escalar el video para que se ajuste a esa región. No sé si Android está escalando automáticamente en dimensiones determinadas, pero no pude hacerlo.

+0

http://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video Este enlace puede ser útil para usted –

+0

que ya avanza sobre ella, pero no hacen ninguna diferencia. No sé por qué es difícil – denizt

+2

Bueno, solucioné este problema al transferir mi aplicación a ICS. En ICS, funciona sin problemas. Sin embargo, cuando estaba tratando de hacer eso con Froyo, tuve muchos problemas. Los revisaré si alguien también se enfrenta con ellos. – denizt

Respuesta

2

Que este le ayudará a ...

public void onMeasure(int width, int height) 
{ 
    getHolder().setFixedSize(width, height); 
    forceLayout(); 
      setMeasuredDimension(width, height); 
    invalidate(); 
} 

... y probar un RelativeLayout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <VideoView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentLeft="true"/> 

</RelativeLayout> 
1

Creo que tienes para crear un ViewGroup donde se pueden implementa OnLayout método().

Aquí puede establecer la posición de sus vistas llamando directamente al método layout() para cada una de ellas.

Ejemplo:

ViewGroup vg = new ViewGroup(this) { 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
      int x = getMeasuredWidth(); 
      int y = getMeasuredHeight(); 
      for (int i = 0; i < vg.getChildCount(); i++) { 
       if(vg.getChildAt(i) instanceof TextView){ 
        vg.getChildAt(i).layout(...);//and so on... 

       } 
      } 
     } 
}; 

Hope ayudando !!

Cuestiones relacionadas