Android 接入第三方crosswalk,播放视频时,全屏非全屏切换的过程会闪现一下桌面,解决办法

 

问题现象:使用crosswalk的内核打开播放视频的时候,点击一个弹窗播放,在点击全屏按钮,切换到全屏的过程,会闪现桌面的画面,然后再进入全屏,退出的时候也是相同现象。

 

思路:观察切换过程调用的方法,在调用的方法中加入覆盖显示一个黑屏转场界面,延时进行关闭。这样切换的过程就是黑屏的了。一开始是简单修改父布局和XWalkView加入颜色,使其不透明,发现没有效果。后面就在上面加了一层黑色的loading_bg

 

private boolean isFullScreen = false;
private FrameLayout loadingBg;

loadingBg = findViewById(R.id.loading_bg);
   

xwalkview.setUIClient(new XWalkUIClient(xwalkview) {

     
            @Override
            public void onFullscreenToggled(XWalkView view, boolean enterFullscreen) {
                isFullScreen = enterFullscreen;
                Log.d("XWalkLib", "isFullScreen: " + isFullScreen);
                if (isFullScreen && loadingBg.getVisibility() == View.GONE){
                    Log.d("XWalkLib", "loadingBgShow1: " + isFullScreen);
                    loadingBg.setVisibility(View.VISIBLE);
                    handler.removeMessages(DELAY_CLOSE_LOADING);
                    handler.sendEmptyMessageDelayed(DELAY_CLOSE_LOADING, 500);
                }else if (!isFullScreen && loadingBg.getVisibility() == View.GONE){
                    Log.d("XWalkLib", "loadingBgShow2: " + isFullScreen);
                    loadingBg.setVisibility(View.VISIBLE);
                    handler.removeMessages(DELAY_CLOSE_LOADING);
                    handler.sendEmptyMessageDelayed(DELAY_CLOSE_LOADING, 500);
                }
            }

        });


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Log.d("XWalkLib", "KEYCODE_BACK");
            if (xwalkview.getNavigationHistory().canGoBack() || isFullScreen) {
                Log.d("XWalkLib", "back");
                if (isFullScreen && loadingBg.getVisibility() == View.GONE){
                    Log.d("XWalkLib", "loadingBgShow2: " + isFullScreen);
                    loadingBg.setVisibility(View.VISIBLE);
                    handler.removeMessages(DELAY_CLOSE_LOADING);
                    handler.sendEmptyMessageDelayed(DELAY_CLOSE_LOADING, 500);
                }
                xwalkview.getNavigationHistory().navigate(
                        XWalkNavigationHistory.Direction.BACKWARD, 1); //返回上一页面
                return true;
            } else {
                Log.d("XWalkLib", "finish");
                finish(); //退出
            }
            return true;
        }
        return false;
    }


private final int DELAY_CLOSE_LOADING = 0x12;
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == DELAY_CLOSE_LOADING){
                loadingBg.setVisibility(View.GONE);
            }
        }
    };



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.XWalkActivity">

    <org.xwalk.core.XWalkView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:id="@+id/loading_bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black"
        android:visibility="gone"/>

</RelativeLayout>

 

loadingBgShow1 是非全屏切换成全屏的时候显示覆盖页,延时关闭
loadingBgShow2 是全屏切换成非全屏的时候显示覆盖页,延时关闭

但是关闭全屏播放有两种方式:

一种是按返回键,我们在 onKeyDown里面监听了,点击后在闪现到桌面之前可以第一时间覆盖住,这种方式退出全屏没有问题,不会闪了。

另一种点击视频播放界面右下角的缩放按钮退出。这个时候,没办法监听到点击事件,飞鼠的enter按键被拦截了,复写XWalkUIClient里面的点击监听方法也监听不到的。就算能监听到,也无法判断是否点击到了缩放按钮。这个时候只能退而求其次,在onFullscreenToggled里面,进行判断loadingBgShow2,这只能减少闪现的时间。由于点击退出全屏按钮的第一时间没有覆盖住,直接闪现到桌面了,但是点击不会立即调用onFullscreenToggled,这个时候还是会闪一下。目前还没想到好的解决方案,暂时先这样解决了,由于我这个是tv开发,用户一般习惯用返回键关闭。

ps:方法有点笨,后续有更好的方案再更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值