1

わかりました、私はこれで計算するカスタム アスペクト比で Oreo の新しい Picture in Picture (PIP) モードを使用しています。

    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x + (size.x / 2);
    int height = size.y;

    Rational aspectRatio = new Rational(width, height);
    PictureInPictureParams.Builder PIPParamsBuilder = new PictureInPictureParams.Builder();
    PIPParamsBuilder.setAspectRatio(aspectRatio).build();
    enterPictureInPictureMode(PIPParamsBuilder.build());

基本的に、デフォルトよりも少し幅が広くなります。私の問題は、横向きモードで同じコードを使用すると、次のエラーが発生することです。

    java.lang.IllegalArgumentException: enterPictureInPictureMode: Aspect ratio is too extreme (must be between 0,418410 and 2,390000).
                  at android.os.Parcel.readException(Parcel.java:1946)
                  at android.os.Parcel.readException(Parcel.java:1888)
                  at android.app.IActivityManager$Stub$Proxy.enterPictureInPictureMode(IActivityManager.java:9750)
                  at android.app.Activity.enterPictureInPictureMode(Activity.java:2119)
                  at com.brickx.creartup.Main.startPIP(Main.java:740)
                  at com.brickx.creartup.Main.onUserLeaveHint(Main.java:751)
                  at android.app.Activity.performUserLeaving(Activity.java:7151)
                  at android.app.Instrumentation.callActivityOnUserLeaving(Instrumentation.java:1572)
                  at android.app.ActivityThread.performUserLeavingActivity(ActivityThread.java:4082)
                  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:4058)
                  at android.app.ActivityThread.-wrap15(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1700)
                  at android.os.Handler.dispatchMessage(Handler.java:105)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6809)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

ログは非常に明白です: アスペクト比が最大を超えています。

しかし、私の質問は次のとおりです。なぜこれを処理する必要があるのですか? 幅や高さがそれを超えた場合、Android は自動的にそれぞれの最大値に設定できませんか?

ここで何かが足りないのかもしれませんが、最大値を超えた場合に備えて、PIP に入るたびにデバイスの幅を確認するべきではないと思います...

4

1 に答える 1

2

この制限は、アスペクト比が 0.5 未満で 2.5 を超えるもの (おおまかに) は、画面上でスペースを取り、ユーザーがスワイプ/それをタップします。

たとえば、アスペクト比を 0.01 に設定できる場合、幅は 1 ピクセルになり、ユーザーがビューを操作することは文字通り不可能になります。

于 2018-03-21T10:21:54.343 に答える