0

問題が発生しています。onResume が呼び出された後、メディア プレーヤーのアスペクト比がめちゃくちゃになる

private void aspectRatio(MediaPlayer vp)
{

    Integer videoHeight;
    Integer videoWidth;
    //Obtain current video's dimensions for keeping aspect Ration the same on all devices
    videoHeight = vp.getVideoHeight();
    videoWidth = vp.getVideoWidth();

    //Get width of screen
    Integer screenWidth = getWindowManager().getDefaultDisplay().getWidth();
    Integer screenHeight = getWindowManager().getDefaultDisplay().getHeight();

    Log.i("AspectRatio VP WxH", videoHeight.toString() +" x " + videoWidth.toString());
    Log.i("AspectRatio Screen WxH", screenHeight.toString() + " x " + screenWidth.toString());
    ViewGroup.LayoutParams viewParameters = view.getLayoutParams();

    float ratioWidth = (float)screenWidth/(float)videoWidth;
    float ratioHeight = (float)screenHeight/(float)videoHeight;
    float aspectRatio = (float)videoWidth/(float)videoHeight;

    if(ratioWidth>ratioHeight)
    {
        viewParameters.width = (int)(screenHeight * aspectRatio);
        viewParameters.height= screenHeight;
    }
    else if(ratioWidth < ratioHeight)
    {
        viewParameters.width = screenWidth;
        viewParameters.height = (int) (screenHeight / aspectRatio);
    }

    Integer x = viewParameters.width;
    Integer y = viewParameters.height;
    Log.i("Screen", x.toString() + " " + y.toString());
    view.setLayoutParams(viewParameters);
}

これは、アスペクト比を取得してそれを私の surfaceView に入れる関数でした。問題は、 onResume() の後、その幅が想定よりもはるかに小さいことです。何が悪いのか分かりますか?

4

1 に答える 1

0

表面が変更されたときに再作成されたため、アスペクト比が台無しになりました。アスペクト比が onSurfaceChanged にも設定されるように変更しました。現在問題なく動作しています。

于 2012-06-15T16:37:05.703 に答える