cocos-webview 添加关闭按钮-android篇

**前言:cocos webview 作为一个独立的容器在ui层级之上,所以我们想通过游戏内ui来操控它是不容易的事情,把操作ui直接加到webview 容器层上,可以解决这个问题 **

观察cocos2dxWebViewHelper 发现,cocos 通过这个类来管理游戏内的webview,所以我们只需要控制好在创建,销毁 webview 的时候,将相关ui做同样的动作即可

这边先实现下关闭按钮的创建。 在 cocos2dxWebViewHelper中添加方法

    public static void createSkipButton(int index) {

        skipImgBtn = new ImageView(sCocos2dxActivity);
//        skipImgBtn.setRotation(90);
        //定义矩阵对象
        Matrix matrix = new Matrix();
        matrix.setRotate(90);
        //缩放原图
        // matrix.postScale(1.5f, 1.5f);
        float w = 0;
        float h = 0;

        Bitmap bitmap;
        Bitmap dstbmp;
        bitmap = BitmapFactory.decodeResource(sCocos2dxActivity.getResources(), R.drawable.skip);
        dstbmp = Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(), bitmap.getHeight(),matrix,true);
        skipImgBtn.setImageBitmap(dstbmp);
        w = dstbmp.getWidth();
        h = dstbmp.getHeight();
        //获取屏幕尺寸几种方式
        // 参考文档 http://blog.csdn.net/ithomer/article/details/6688883
        DisplayMetrics dm = new DisplayMetrics();
        sCocos2dxActivity.getWindowManager().getDefaultDisplay().getMetrics(dm);

        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams((int)w, (int)h);

        params.leftMargin = (int) (sCocos2dxActivity.getWindowManager().getDefaultDisplay().getWidth()-w-20);
        params.topMargin = (int) (sCocos2dxActivity.getWindowManager().getDefaultDisplay().getHeight()-h);

        Cocos2dxWebView view = webViews.get(index);
        view.skipImgBtn = skipImgBtn;

        btnIndex = index;

        skipImgBtn.bringToFront();
        sLayout.addView(skipImgBtn,params);

        skipImgBtn.invalidate();
        skipImgBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                removeWebView(btnIndex);
            }
        });

    }
        

来创建关闭按钮 添加移除方法

public static void removeSkipBtn(){
        if (skipImgBtn!= null){
            sLayout.removeView(skipImgBtn);
            skipImgBtn = null;
        }
    }

skipImgBtn 记得在类中声明

private static ImageView skipImgBtn = null;
    private static int btnIndex = 0;

方法实现完之后,只需在createWebView 方法中 跟着创建即可

 public static int createWebView() {
        final int index = viewTag;
        sCocos2dxActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxWebView webView = new Cocos2dxWebView(sCocos2dxActivity, index);
                FrameLayout.LayoutParams lParams = new FrameLayout.LayoutParams(
                        FrameLayout.LayoutParams.WRAP_CONTENT,
                        FrameLayout.LayoutParams.WRAP_CONTENT);
                sLayout.addView(webView, lParams);

                webViews.put(index, webView);
                createSkipButton(index);
            }
        });
        return viewTag++;
    }

在移除中跟着移除

public static void removeWebView(final int index) {
        sCocos2dxActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxWebView webView = webViews.get(index);
                if (webView != null) {
                    webViews.remove(index);
                    sLayout.removeView(webView);
                    webView.destroy();
                    webView = null;
                }

                removeSkipBtn();
            }
        });
    }

别忘了在显隐控制中,跟着操作

 public static void setVisible(final int index, final boolean visible) {
        sCocos2dxActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Cocos2dxWebView webView = webViews.get(index);
                if (webView != null) {
                    webView.setVisibility(visible ? View.VISIBLE : View.GONE);
                }
                if (skipImgBtn!= null){
                    skipImgBtn.setVisibility(visible ? View.VISIBLE : View.GONE);
                }
            }
        });
    }

这样子就实现了在cocos webview 上添加关闭按钮的功能。

This article was updated on 八月 3, 2023