8

Android VideoView のサイズを動的に設定しようとしています。インターネットだけでなく StackOverflow も調べました。私が見つけた最良の解決策はhereからでした。実装を以下に示します。

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のサイズを適切に変更するにはどうすればよいですか?

ありがとう、ヴァンス

4

1 に答える 1

3

私の実装は次のように機能します。

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 (および新しい寸法) を使用してビデオビュー全体を強制的に再描画します。

于 2012-10-02T08:21:24.910 に答える