2012-06-14 15 views
8

Android VideoViewのサイズを動的に設定しようとしています。私はStackOverflowとインターネットを見てきました。私が見つけた最良の解決策はhereです。私は以下の実装を実装しました:Resize VideoView

public class ResizableVideoView extends VideoView { 

    public ResizableVideoView(Context c) { 
     super(c); 
    } 

    private int mVideoWidth = 100; 
    private int mVideoHeight = 100; 

    public void changeVideoSize(int width, int height) { 
     mVideoWidth = width;  
     mVideoHeight = height; 

     // not sure whether it is useful or not but safe to do so 
     getHolder().setFixedSize(width, height); 

     forceLayout(); 
     invalidate(); // very important, so that onMeasure will be triggered 
    } 

    public void onMeasure(int specwidth, int specheight) { 
     Log.i("onMeasure","On Measure has been called"); 
     setMeasuredDimension(mVideoWidth, mVideoHeight); 
    } 

    public void onDraw(Canvas c) { 
     super.onDraw(c); 
     Log.i("onDraw","Drawing..."); 
    } 
} 

ビデオは、AndroidエミュレータとMotorola Droid Xで正しくサイズが変更されます。 Motorola Droidでは、VideoViewのサイズは変更されますが、VideoViewで再生されるビデオのサイズは変更されません。 Motorola Droidでは、VideoViewがビデオ再生よりも大きな次元に設定されている場合、黒い背景がVideoViewに表示され、ビデオは黒い背景の上にVideoViewの左上隅に再生されます。

AndroidでVideoViewのサイズを適切に変更するにはどうすればよいですか?

私の実装がこのように動作しますおかげで、 バンス

答えて

3

:videoviewを無効化することにより

RelativeLayout.LayoutParams videoviewlp = new RelativeLayout.LayoutParams(newwidth, newheight); 
    videoviewlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); 
    videoviewlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); 
    videoview.setLayoutParams(videoviewlp); 
    videoview.invalidate(); 

、新しいLayoutParams(および新しい次元)を用いて全videoviewを再描画することを強制されます。

+0

私はそれをテストします。サイズを変更する代わりにビデオをトリミングします!あなたは何か考えていますか? – boomz

+1

@boomz私は最終的に昨年の夏に実装を作成しました。 [VideoPlayer](https://github.com/Vance-Turner/appinventor-sources/blob/master/appinventor/components/src/com/google/appinventor/components/runtime/VideoPlayer.java)クラスをご覧くださいApp Inventorプロジェクト(昨夏のリサイズコードは私の仕事でした)から –