Android-推薦一個引導層的開源庫(NewbieGuide)

圖片來源網(wǎng)絡柬唯,入侵必刪

在日常Android業(yè)務開發(fā)當中,我們肯定會有關于新手引導的需求圣贸。我們怎么快速實現(xiàn)呢?這里推薦一個快速實現(xiàn)的框架腮恩。

NewbieGuide

這是一款可以通過簡潔鏈式調(diào)用新手引導層的庫,一行代碼實現(xiàn)引導層的顯示,自動判斷首次顯示,當然也可以通過參數(shù)配置來滿足不同的顯示邏輯和需求感混。

NewbieGuide的引入

需要在項目級的build.gradle加入:

allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
}

module的build.gradle加入:

 dependencies {
      implementation 'com.github.huburt-Hu:NewbieGuide:v2.4.0'
}

注意這個庫是使用v7包,如果項目是使用AndroidX菌仁,是需要自己下載代碼重構的浩习。更多具體的信息請看開源庫wiki

簡單使用

NewbieGuide.with(activity)
        .setLabel("guide1")
        .addGuidePage(GuidePage.newInstance()
            .addHighLight(btnSimple)
            .setLayoutRes(R.layout.view_guide_simple))
        .show();

高亮View

addHighLight方法有多個重寫静暂,完整參數(shù)如下:

    /**
     * 添加需要高亮的view
     *
     * @param view          需要高亮的view
     * @param shape         高亮形狀{@link com.app.hubert.guide.model.HighLight.Shape}
     * @param round         圓角尺寸济丘,單位dp,僅{@link com.app.hubert.guide.model.HighLight.Shape#ROUND_RECTANGLE}有效
     * @param padding       高亮相對view的padding,單位px
     * @param relativeGuide 相對于高亮的引導布局
     */
    public GuidePage addHighLight(View view, HighLight.Shape shape, int round, int padding, @Nullable RelativeGuide relativeGuide)

高亮區(qū)域

有些情況可能不太容易獲得高亮view的引用,那么此時可以用添加高亮區(qū)域的方式來代替摹迷, 計算出需要高亮的view在anchor中位置疟赊,將獲得的rectF傳入addHighLight方法

    /**
     * 添加高亮區(qū)域
     *
     * @param rectF         高亮區(qū)域,相對于anchor view(默認是android.R.id.content)
     * @param shape         高亮形狀{@link com.app.hubert.guide.model.HighLight.Shape}
     * @param round         圓角尺寸峡碉,單位dp近哟,僅{@link com.app.hubert.guide.model.HighLight.Shape#ROUND_RECTANGLE}有效
     * @param relativeGuide 相對于高亮的引導布局
     */
    public GuidePage addHighLight(RectF rectF, HighLight.Shape shape, int round, @Nullable RelativeGuide relativeGuide)

顯示次數(shù)限制

通常情況下引導頁只在用戶首次打開app的時候顯示,第二次進入時不顯示鲫寄,因此默認只顯示一次吉执。當然你也可以通過.setShowCounts(3)自定義顯示的次數(shù),調(diào)試的時候可以使用.alwaysShow(true)設置每次都顯示地来。

NewbieGuide.with(activity)
        .setLabel("guide1")
        //.setShowCounts(3)//控制次數(shù)
        .alwaysShow(true)//總是顯示戳玫,調(diào)試時可以打開
        .addGuidePage(GuidePage.newInstance()
            .addHighLight(btnSimple)
            .setLayoutRes(R.layout.view_guide_simple))
        .show();

引入布局

setLayoutRes方法,通常其他的類似的庫都是通過代碼參數(shù)來控制說明內(nèi)容展示在高亮view相對的位置未斑。

GuidePage.newInstance()
    .addHighLight(btnDialog)
    .setEverywhereCancelable(false)//是否點擊任意位置消失引導頁咕宿,默認true
    .setLayoutRes(R.layout.view_guide_dialog, R.id.btn_ok)
    .setOnLayoutInflatedListener(new OnLayoutInflatedListener() {
        @Override
        public void onLayoutInflated(View view, Controller controller) {
            TextView tv = view.findViewById(R.id.tv_text);
        }
    })

引導頁顯示隱藏監(jiān)聽

NewbieGuide.with(FirstActivity.this)
    .setLabel("listener")
    .alwaysShow(true)//總是顯示,調(diào)試時可以打開
    .setOnGuideChangedListener(new OnGuideChangedListener() {
        @Override
        public void onShowed(Controller controller) {
            Toast.makeText(FirstActivity.this, "引導層顯示", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onRemoved(Controller controller) {
            Toast.makeText(FirstActivity.this, "引導層消失", Toast.LENGTH_SHORT).show();
        }
    })
    .addGuidePage(GuidePage.newInstance().addHighLight(btnListener))
    .show();

多引導頁的監(jiān)聽

.setOnPageChangedListener(new OnPageChangedListener() {
    @Override
    public void onPageChanged(int page) {
         //引導頁切換蜡秽,page為當前頁位置府阀,從0開始
        Toast.makeText(MainActivity.this, "引導頁切換:" + page, Toast.LENGTH_SHORT).show();
    }
})
.addGuidePage(//添加一頁引導頁
    GuidePage.newInstance()//創(chuàng)建一個實例
       .addHighLight(button)//添加高亮的view
        .addHighLight(tvBottom, HighLight.Shape.RECTANGLE)
        .setLayoutRes(R.layout.view_guide)//設置引導頁布局
        .setOnLayoutInflatedListener(new OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(View view, Controller controller) {
                //引導頁布局填充后回調(diào),用于初始化
                TextView tv = view.findViewById(R.id.textView2);
                tv.setText("我是動態(tài)設置的文本");
            }
        })
    .setEnterAnimation(enterAnimation)//進入動畫
    .setExitAnimation(exitAnimation)//退出動畫
                )
.addGuidePage(
      GuidePage.newInstance()
        .addHighLight(tvBottom, HighLight.Shape.RECTANGLE, 20)
        .setLayoutRes(R.layout.view_guide_custom, R.id.iv)//引導頁布局芽突,點擊跳轉(zhuǎn)下一頁或者消失引導層的控件id
       .setEverywhereCancelable(false)//是否點擊任意地方跳轉(zhuǎn)下一頁或者消失引導層试浙,默認true
        .setBackgroundColor(getResources().getColor(R.color.testColor))//設置背景色,建議使用有透明度的顏色
        .setEnterAnimation(enterAnimation)//進入動畫
        .setExitAnimation(exitAnimation)//退出動畫
    )

引導頁切換動畫

Animation enterAnimation = new AlphaAnimation(0f, 1f);
enterAnimation.setDuration(600);
enterAnimation.setFillAfter(true);

Animation exitAnimation = new AlphaAnimation(1f, 0f);
exitAnimation.setDuration(600);
exitAnimation.setFillAfter(true);

GuidePage.setEnterAnimation(enterAnimation)//進入動畫
GuidePage.setExitAnimation(exitAnimation)//退出動畫
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诉瓦,一起剝皮案震驚了整個濱河市川队,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睬澡,老刑警劉巖固额,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煞聪,居然都是意外死亡斗躏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門昔脯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啄糙,“玉大人,你說我怎么就攤上這事云稚∷肀” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵静陈,是天一觀的道長燕雁。 經(jīng)常有香客問我诞丽,道長,這世上最難降的妖魔是什么拐格? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任僧免,我火速辦了婚禮,結果婚禮上捏浊,老公的妹妹穿的比我還像新娘懂衩。我一直安慰自己,他們只是感情好金踪,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布浊洞。 她就那樣靜靜地躺著,像睡著了一般胡岔。 火紅的嫁衣襯著肌膚如雪沛申。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天姐军,我揣著相機與錄音铁材,去河邊找鬼。 笑死奕锌,一個胖子當著我的面吹牛著觉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惊暴,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼饼丘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辽话?” 一聲冷哼從身側響起肄鸽,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎油啤,沒想到半個月后典徘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡益咬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年逮诲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片幽告。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡梅鹦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冗锁,到底是詐尸還是另有隱情齐唆,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布冻河,位于F島的核電站箍邮,受9級特大地震影響抛腕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜媒殉,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望摔敛。 院中可真熱鬧廷蓉,春花似錦、人聲如沸马昙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽行楞。三九已至攒暇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間子房,已是汗流浹背形用。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留证杭,地道東北人田度。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像解愤,于是被迫代替她去往敵國和親镇饺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容