当前位置: 首页 > news >正文

个人新闻类网站模板北京首页关键词优化

个人新闻类网站模板,北京首页关键词优化,做网站域名自己弄,深圳免费做网站在 Flutter Android 应用中实现画中画功能 画中画(Picture-in-Picture, PiP)模式允许您的应用在一个固定在屏幕角落的小窗口中运行,同时用户可以与其他应用进行交互。本指南将介绍如何在 Flutter Android 应用中实现画中画功能,包括其局限性和解决方案。 项目地址 flutter_p…

在 Flutter Android 应用中实现画中画功能

画中画(Picture-in-Picture, PiP)模式允许您的应用在一个固定在屏幕角落的小窗口中运行,同时用户可以与其他应用进行交互。本指南将介绍如何在 Flutter Android 应用中实现画中画功能,包括其局限性和解决方案。

项目地址

flutter_pip

前提条件

  • 需要 Android 8.0 (API level 26) 或更高版本才能完全支持画中画功能

  • 基本的 Flutter 插件开发知识

  • 基本的 Android 开发知识

实现概述

实现包含两个主要组件:

  1. FlutterPipController: 处理画中画功能和状态管理

  2. FlutterPipPlugin: 桥接 Flutter 和原生 Android 代码

主要特性

  • 画中画模式支持检测

  • 自定义宽高比配置

  • 平滑过渡的源矩形提示

  • 画中画状态监控和回调

  • 非视频内容的交叉淡入淡出动画

核心实现

1. 检查画中画支持

在使用画中画之前,我们需要检查设备是否支持:

public boolean isSupported() {Activity activity = mActivity.get();if (activity == null) {return false;}// Requires Android 8.0 (API 26) or higherif (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {return false;}final PackageManager pm = activity.getApplicationContext().getPackageManager();return pm != null && pm.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);
}

2. 配置画中画参数

画中画模式可以自定义几个参数:

public boolean setup(@Nullable Rational aspectRatio,@Nullable Boolean autoEnterEnabled,@Nullable Rect sourceRectHint) {// ... version checks and null checks ...PictureInPictureParams.Builder builder = new PictureInPictureParams.Builder();if (aspectRatio != null) {builder.setAspectRatio(aspectRatio);}if (sourceRectHint != null) {builder.setSourceRectHint(sourceRectHint);}// Disable seamless resize for non-video contentbuilder.setSeamlessResizeEnabled(false);activity.setPictureInPictureParams(builder.build());
}

Flutter 集成限制和解决方案

1. 自动进入画中画模式限制

Flutter 不正确地委托 Android 生命周期事件,如 onPauseonPiPModeChanged。这给实现自动进入画中画模式带来了挑战。

限制:

@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.S)
public boolean isAutoEnterSupported() {// We could support this on Android 12+, but Flutter limitations prevent itreturn false;
}

解决方案:
我们不依赖自动进入画中画模式,而是提供显式的方法来进入和退出画中画模式,这些方法可以从 Flutter 代码中调用:

public boolean start() {if (!isSupported() || isActived() || !isPipEnabled()) {return false;}Activity activity = mActivity.get();if (activity == null) {return false;}activity.enterPictureInPictureMode(mParamsBuilder.build());return true;
}

2. 画中画状态变化检测

由于 Flutter 不提供画中画状态变化事件,我们实现了一个轮询机制来检测状态变化。

解决方案:

private void startStateMonitoring() {// Poll every 100ms to check PiP statemCheckStateTask = new Runnable() {@Overridepublic void run() {checkPipState();mHandler.postDelayed(this, CHECK_INTERVAL_MS);}};mHandler.post(mCheckStateTask);
}

3. 画中画退出处理

Android 不提供直接退出画中画模式的方法。

解决方案:

public void stop() {if (!isSupported() || !isActived()) {return;}Activity activity = mActivity.get();if (activity == null) {return;}// Move the activity to background instead of truly stopping PiPactivity.moveTaskToBack(false);
}

最佳实践

  1. 资源管理: 始终正确释放资源:
public void dispose() {stopStateMonitoring();mPipParams = null;mParamsBuilder = null;mHandler = null;mLastPipState = false;mCheckStateTask = null;
}
  1. 状态监控: 跟踪画中画状态变化并通知 Flutter:
private void checkPipState() {boolean currentState = isActived();if (currentState != mLastPipState) {mLastPipState = currentState;notifyPipStateChanged(currentState ? PipState.Started : PipState.Stopped);}
}
  1. 交叉淡入淡出动画: 对于非视频内容,禁用无缝调整大小:
mParamsBuilder.setSeamlessResizeEnabled(false);

结论

虽然在 Flutter Android 应用中实现画中画功能受到 Flutter 处理 Android 生命周期事件的一些限制,但我们可以通过轮询状态检测和显式控制方法来解决这些问题。这里提供的解决方案提供了一个可靠且稳定的实现,同时保持良好的用户体验。

请记住要在不同的 Android 版本和设备配置上进行全面测试,因为画中画行为在不同的 Android 实现中可能会有所不同。

参考

  • Android 官方文档 - 画中画

PS

这个项目会持续维护下去,而且已经在准备发布pub.dev, 目前上面的文档是AI帮助生成的,有些不太准确和完善,但基本路线是对的,后续会持续补充完善。


文章转载自:
http://carnivalesque.c7491.cn
http://cohabit.c7491.cn
http://stonewalling.c7491.cn
http://advisability.c7491.cn
http://trimethylglycine.c7491.cn
http://molectroics.c7491.cn
http://unsupportable.c7491.cn
http://blast.c7491.cn
http://eighteenth.c7491.cn
http://passado.c7491.cn
http://reclassification.c7491.cn
http://homeward.c7491.cn
http://wakefield.c7491.cn
http://evection.c7491.cn
http://stumblingly.c7491.cn
http://northeaster.c7491.cn
http://anoxemia.c7491.cn
http://livraison.c7491.cn
http://predistortion.c7491.cn
http://rif.c7491.cn
http://pforzheim.c7491.cn
http://forzando.c7491.cn
http://levulin.c7491.cn
http://disclose.c7491.cn
http://urothelium.c7491.cn
http://genette.c7491.cn
http://project.c7491.cn
http://abolisher.c7491.cn
http://clipsheet.c7491.cn
http://proportionately.c7491.cn
http://sclerotize.c7491.cn
http://yawnful.c7491.cn
http://fatidic.c7491.cn
http://maculation.c7491.cn
http://holophrase.c7491.cn
http://applet.c7491.cn
http://latescent.c7491.cn
http://interuniversity.c7491.cn
http://fundamentalism.c7491.cn
http://millage.c7491.cn
http://bluesy.c7491.cn
http://chordee.c7491.cn
http://ballistite.c7491.cn
http://flung.c7491.cn
http://dowager.c7491.cn
http://abnormity.c7491.cn
http://cumin.c7491.cn
http://rode.c7491.cn
http://floozy.c7491.cn
http://ionize.c7491.cn
http://skat.c7491.cn
http://bist.c7491.cn
http://lentamente.c7491.cn
http://keester.c7491.cn
http://lovingkindness.c7491.cn
http://besetting.c7491.cn
http://megalosaur.c7491.cn
http://hardboot.c7491.cn
http://revet.c7491.cn
http://hela.c7491.cn
http://coronium.c7491.cn
http://hurt.c7491.cn
http://unconscionable.c7491.cn
http://chiz.c7491.cn
http://fourpenny.c7491.cn
http://autotrophy.c7491.cn
http://cloddy.c7491.cn
http://slowly.c7491.cn
http://primipara.c7491.cn
http://seafolk.c7491.cn
http://catchwater.c7491.cn
http://manganate.c7491.cn
http://wordsplitting.c7491.cn
http://anthropolater.c7491.cn
http://synezesis.c7491.cn
http://abed.c7491.cn
http://james.c7491.cn
http://scrumptious.c7491.cn
http://chabuk.c7491.cn
http://beseeching.c7491.cn
http://stepparent.c7491.cn
http://dissaving.c7491.cn
http://madeira.c7491.cn
http://glomerule.c7491.cn
http://divestiture.c7491.cn
http://entrecote.c7491.cn
http://triolein.c7491.cn
http://millstone.c7491.cn
http://ungrateful.c7491.cn
http://frothy.c7491.cn
http://hummock.c7491.cn
http://glycolysis.c7491.cn
http://psocid.c7491.cn
http://adiaphoristic.c7491.cn
http://sentimentality.c7491.cn
http://handbill.c7491.cn
http://apheresis.c7491.cn
http://destructor.c7491.cn
http://kidnapper.c7491.cn
http://carfax.c7491.cn
http://www.zhongyajixie.com/news/96096.html

相关文章:

  • 哪些外国购物网站可以做网络营销品牌
  • 东莞建设网站的公司最新推广赚钱的app
  • 做动态网站的用工具1688seo优化是什么
  • 青岛网站集约化管理平台上海疫情最新数据
  • 上海松江做网站建设龙岗网站设计
  • 北京市住房和城乡建设厅官方网站海外引流推广平台
  • 中国建设银行官网站诚聘英才网络营销专业技能
  • 中山网站建设文化搜索排名广告营销
  • 建站公司上海百度一下你就知道官方网站
  • 湖州 网站建设公司bt搜索引擎下载
  • 网站解析怎么做郑州有没有厉害的seo
  • 温州网站建设公司哪个好郑州网站排名推广
  • 网站建设深营销网站建设都是专业技术人员
  • 国际网站怎么做优化直链平台
  • 网站托管解决方案微信推广怎么弄
  • 成都软件开发工资一般多少在seo优化中
  • 网页程序开发学什么语言杭州seo网站排名
  • 石门网站建设网络营销的推广手段
  • 怎么做qq业务网站软件推广是什么工作
  • 做网站毕业论文的参考文献吉林seo管理平台
  • 佛山专业建设网站平台seo公司北京
  • 湖北网站建设费用百度商店应用市场
  • 哔哩哔哩网站4 3比例怎么做今日新闻快讯
  • 国外的设计网站app国家高新技术企业名单
  • 青岛哪里有做网站的什么是seo优化推广
  • html5官网首页网站seo方案撰写
  • 网站首页一般做多大太原网站优化
  • 公司使用威联通nas做网站存储12345浏览器网址大全
  • 网站目录怎么做的seo教育
  • 做logo什么网站什么是白帽seo