Android:禁用PIP模式进入动画,解决图片异常拉伸问题
禁用PIP模式进入动画的解决方案
1. 移除Activity启动动画
在启动PIPActivity时,给Intent添加无动画标记,同时在PIPActivity内部覆盖过渡动画:
- 启动Activity的代码:
Intent pipIntent = new Intent(context, PIPActivity.class); pipIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); startActivity(pipIntent);
- 在PIPActivity的
onCreate()方法开头添加:
overridePendingTransition(0, 0);
2. 清除窗口动画配置
在PIPActivity的主题中添加以下属性,彻底禁用窗口相关动画:
<style name="PIPActivityTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowAnimationStyle">@null</item> <item name="android:windowEnterAnimation">@null</item> <item name="android:windowExitAnimation">@null</item> </style>
记得在AndroidManifest.xml中给PIPActivity指定这个主题。
3. 优化PIP进入时机与参数
避免在onCreate()直接调用enterPictureInPictureMode()(此时ImageView可能未完成测量布局,易导致拉伸+动画异常),改为在View布局完成后再进入PIP,同时配置正确的宽高比:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(0, 0); setContentView(R.layout.activity_pip); ImageView imageView = findViewById(R.id.pip_image); // 假设已完成图片资源设置 imageView.post(() -> { // 禁用窗口动画 getWindow().setWindowAnimations(0); // 配置PIP参数,使用图片实际宽高比 Rational aspectRatio = new Rational(imageView.getWidth(), imageView.getHeight()); PictureInPictureParams params = new PictureInPictureParams.Builder() .setAspectRatio(aspectRatio) .build(); enterPictureInPictureMode(params); }); }
关键说明
通过以上步骤,既移除了Activity启动时的过渡动画,也规避了PIP模式切换时的系统默认动画,同时确保图片以正确宽高比进入PIP,解决拉伸问题,实现类似WhatsApp的无动画平滑切换效果。
内容的提问来源于stack exchange,提问作者Mohammad Javad Habibpour
相关产品推荐
相关产品推荐

