2012-05-17 4 views
15

Attualmente sto cercando di implementare una videoview che mostrerà un video su una posizione specifica. Posso mostrare un video a schermo intero senza problemi. Tuttavia ogni volta che provo a mostrare quel video all'interno di un frame (un piccolo rettangolo per esempio) posso mostrare solo una parte del video in quella vista. Non potevo adattare il video a quella vista.Come posso visualizzare un video all'interno di una videoview in una posizione specifica?

Sono già in cerca di molti link su come ridimensionare un video in Android, tuttavia non sono riuscito a trovare alcun modo per farlo. Sarà utile qualsiasi aiuto su questo problema.

Quello che sto usando è che ho 2 classi diverse. Uno di loro è la mia classe di attività video e altri uno è una classe di supporto:

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); 
    } 
} 

Quella classe mi aiuta a impostare correttamente le dimensioni di VideoView, però non potevo fare video in forma in quella regione. Intendo dire che non potrei ridimensionare il video per adattarlo a quella regione. Non so se Android sta scalando automaticamente in determinate dimensioni, ma non potrei farlo.

+0

http://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video Questo collegamento può essere utile per voi –

+0

ho già va su di esso, ma non fanno differenza. Non so perché dura – denizt

+2

Bene, ho risolto questo problema con il porting della mia applicazione su ICS. In ICS funziona senza problemi. Tuttavia, quando stavo cercando di farlo con Froyo, ho avuto un sacco di problemi. Li esaminerò se qualcuno affronterà anche loro. – denizt

risposta

2

Che questo vi aiuterà a ...

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

... e provare 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

io penso che si debba creare un ViewGroup dove è possibile implementa onLayout() metodo.

Qui è possibile impostare la posizione delle proprie viste chiamando direttamente il metodo layout() per ognuna di esse.

Esempio:

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... 

       } 
      } 
     } 
}; 

Speranza aiutare !!