NewbieGuide初使用体验

因项目突然需要改变引导的方式,改为遮罩的方式,同事在别的项目中有用到该库[NewbieGuide](huburt-Hu/NewbieGuide: Android 快速实现新手引导层的库,通过简洁链式调用,一行代码实现引导层的显示 (github.com))去实现引导的功能,我这边也就先拿来用一下.

先说下大概的需求点吧

1.指定控件位置需要高亮显示,引导的位置要求不大

2.点击引导图中的按钮可以跳过当前页面中的所有引导

3.点击其余位置(包括高亮处),调到下一个引导页,直到所有引页项都显示完毕,最后关闭引导层(遮罩)

一开始觉得应该没啥问题,应该可以很快就搞定,然而事实上并没有,如果简单使用除外,github上有说明

先说说碰到的问题:

我是一个页面就放一个引导层,一个引导层有多个引导页,所有引导页用的是同一个布局。动态改变提示内容

setOnLayoutInflatedListener(new OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(View view, Controller controller) {
                //引导页布局填充后回调,用于初始化
                TextView tv = view.findViewById(R.id.textView2);
                tv.setText("我是动态设置的文本");
            }
        })

github上给的用法是这样的,然而这里有个前提,你必须先调用setLayoutRes(R.layout.XXXX)该方法, 然而我用的是addHighLight方法传入了RelativeGuide参数去实现的,这时候上述监听就不生效了

GuidePage中:

private void addCustomToLayout(GuidePage guidePage) {
	//....省略
    //layoutResId就是通过setLayoutRes方法设置的,所以必须得先调用setLayoutRes方法,OnLayoutInflatedListener监听才会生效
    if (layoutResId != 0){
        //.....省略
       OnLayoutInflatedListener inflatedListener = guidePage.getOnLayoutInflatedListener();
            if (inflatedListener != null) {
                inflatedListener.onLayoutInflated(view, controller);
            }
        //.....省略
    }
    //...省略
}

另外还有个addHighLightWithOptions的方法,此方法支持传入HighlightOptions参数,该参数可以设置点击事件,自定义图形,但是RelativeGuide参数又没法放进去.

最后,我是通过setOnPageChangedListener监听来实现的

//kotlin:
setOnPageChangedListener { index->
                          //根据不同引导页设置不同提示语句
    _mActivity.findViewById<TextView>(R.id.tvGuideMsg).text = msgList[index]
//设置各引导页的跳过操作
    _mActivity.findViewById<View>(R.id.rbPassAll).setOnClickListener {
        controller?.remove()
    }
//高亮处的点击事件的处理
    guidepages[index].highLights.first().options?.onClickListener = View.OnClickListener {
        val next = index+1
        if (next==guidepages.size){
            controller?.remove()
        }else {
            controller?.showPage(next)
        }
    }
}

controller我是在setOnGuideChangedListener监听中获取的, guidepages是我页面中所有引导页的集合

//kotlin:
NewbieGuide.with(this).setLabel("companyInfo")
    .alwaysShow(true)
    //切换方式引导
    .addGuidePages(//此方法是自己添加的扩展函数
        guidepages//引导页的集合
    )

好了,费了点时间,也算是可以先用着了,因为需要设置引导页的地方比较多,还要再封一层,就这样吧,等有时间再看看有啥好用的没

posted @ 2022-05-07 21:33  Mr`Chen`  阅读(352)  评论(0)    收藏  举报