Android上一個掃描框風格的新手引導庫,android新手
簡介
這是一個掃描框風格的新手引導,效果如。
使用Gradle
compile 'com.yanzhikaijky:YGuider:0.9.2'
支援特性
- 目前暫時只支援一個掃描框的引導(多掃描框的在設計)
- 傳入View對象就會根據它的位置資訊產生座標地區,儲存在目的地區域中。(所以View對象傳入之後位置有更變的,請在
startGuide()前重新調用prepare())
- 傳入區域座標矩形(left,top,right,bottom)也可以設定目標。
- 可以自訂彈窗布局。
可以自訂畫掃描框的畫筆
具體的詳細操作方法可以查看Wiki
使用方法Demo使用
Demo裡面已經包含了使用YGuider的各種姿勢,不過有一些注釋掉而已,歡迎Fork來體驗。^_^
簡單使用
需要傳入Activity對象來建立YGuider,然後加入想要被“掃描”的目標,最後調用prepare()方法就可以了完成準備了:
mYGuider = new YGuider(this); mYGuider.addNextTarget(new RectF(70, 70, 170, 170), "點擊這裡可以立刻出現所有提示文字,大家好,我是YGuider!", 90, 0); mYGuider.addNextTarget(btn1, "這裡是根據傳入View來確定的地區!", 150, 10); mYGuider.addNextTarget(new RectF(50, 500, 150, 650), "這裡是根據傳入矩形地區座標來確定的!", 100, 10); mYGuider.addNextTarget( btn2, "通過設定位移量來控制PopupWindow出現的位置,還可以設定它的大小!" , -350, -350 , 430, ViewGroup.LayoutParams.WRAP_CONTENT); mYGuider.addNextTarget( new RectF(500, 200, 600, 270), "可以動態改變兩個按鈕的文字", -350, 50 , 300, ViewGroup.LayoutParams.WRAP_CONTENT , "", "Finish"); mYGuider.prepare();
最後在需要調用的時候,使用startGuide()方法開始新手引導:
mYGuider.startGuide();
方法介紹
由於方法過多,放在這裡太佔地方,所以請移步Wiki查看各個方法的使用。
關於設定目標的方法
/** * 增加一個掃描地區 * @param targetView 目標View * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) */ public void addNextTarget(View targetView, String text, int wOffsetX, int wOffsetY); /** * 增加一個掃描地區 * @param targetView 目標View * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) * @param wWidth 快顯視窗的寬度 * @param wHeight 快顯視窗的高度 */ public void addNextTarget(View targetView, String text, int wOffsetX, int wOffsetY, int wWidth, int wHeight); /** * 增加一個掃描地區 * @param targetView 目標View * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) * @param wWidth 快顯視窗的寬度 * @param wHeight 快顯視窗的高度 * @param jumpText 跳過選項的文字 * @param nextText 下一步選項的文字 */ public void addNextTarget(View targetView, String text, int wOffsetX, int wOffsetY, int wWidth, int wHeight, String jumpText, String nextText); /** * 增加一個掃描地區 * @param targetRegion 目的地區域的座標矩陣 * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) */ public void addNextTarget(RectF targetRegion, String text, int wOffsetX, int wOffsetY); /** * 增加一個掃描地區 * @param targetRegion 目的地區域的座標矩陣 * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) * @param wWidth 快顯視窗的寬度 * @param wHeight 快顯視窗的高度 */ public void addNextTarget(RectF targetRegion, String text, int wOffsetX, int wOffsetY, int wWidth, int wHeight); /** * 增加一個掃描地區 * @param targetRegion 目的地區域的座標矩陣 * @param text 解說文字 * @param wOffsetX 快顯視窗的X位置位移量(初始位置為目標View中間) * @param wOffsetY 快顯視窗的Y位置位移量(初始位置為目標View正下方) * @param wWidth 快顯視窗的寬度 * @param wHeight 快顯視窗的高度 * @param jumpText 跳過選項的文字 * @param nextText 下一步選項的文字 */ public void addNextTarget(RectF targetRegion, String text, int wOffsetX, int wOffsetY, int wWidth, int wHeight, String jumpText, String nextText); /** * 增加一些Target * @param targets 一些ScanTarget對象 */ public void addTarget(ScanTarget... targets);
注意,執行完上面的增加操作之後需要prepare(),才能讓YGuider獲得目標View位置屬性。
/** * 開始Guide */ public void startGuide(); /** * 進入下一個引導 */ public void startNextGuide(); /** * 退出新手引導 */ public void cancelGuide(); /** * 移除目標 * @param index 目標的index * @return 移除目標成功與否 */ public boolean removeTarget(int index); /** * 清除所有掃描目標 */ public void clearTargets(); /** * 判斷在當前ContentView是否已經初始化寬高屬性 * 如果是,則直接擷取目標View的位置資訊,寫入目標列表 * 如果不是,則等到ContentView初始化寬高屬性之後再擷取 */ public void prepare();
設定自訂屬性的方法
這些方法用於設定一些YGuider本身已有預設值的屬性,替換
/** * 設定掃描框動畫重新整理的時間間隔,預設值是20 * @param refreshTime 單位是ms */ public void setMaskRefreshTime(int refreshTime); /** * 設定掃描框移動動畫的期間,預設值是500 * @param moveDuration 單位是ms */ public void setMaskMoveDuration(int moveDuration); /** * 設定掃描框擴大動畫的期間,預設值是500 * @param expandDuration 單位是ms */ public void setExpandDuration(int expandDuration); /** * 設定遮罩層的顏色,最後是設定成透明的,預設顏色是#aa222222 * @param color 顏色 */ public void setMaskColor(@ColorInt int color); /** * 設定畫掃描框的畫筆 * @param paint 畫筆 */ public void setMaskPaint(Paint paint); /** * 設定彈窗裡面TextView文字出現的速度,預設值是100 * @param refreshTime 每次增加文字的時間間隔,單位ms */ public void setWindowTyperRefreshTime(int refreshTime); /** * 彈窗裡面解說文字的字型大小,預設值是18sp * @param size 字型大小 */ public void setWindowTyperTextSize(int size); /** * 設定彈窗裡面TextView文字的增長速度,預設值是1 * @param increase 每次增加多少個字元 */ public void setWindowTyperIncrease(int increase); /** * 設定跳過按鈕的文字 * @param jumpText 跳過文字 */ public void setJumpText(String jumpText); /** * 設定下一步按鈕的文字 * @param nextText 下一步文字 */ public void setNextText(String nextText); /** * 設定彈窗背景 * @param idRes 背景DrawableId */ public void setWindowBackground(@DrawableRes int idRes); /** * 設定跳過和下一步按鈕文字大小 * @param size 文字字型大小 */ public void setWindowJumpAndNextTextSize(int size); /** * 設定自訂彈窗布局 * 注意新的布局要有TyperTextView類,id設定為ttv_tips * 跳過按鈕和下一步按鈕可以選擇實現,但是有的話id請分別設定為tv_jump和tv_next,其他可以自訂 * @param layouId 布局的id */ public void setWindowContent(@LayoutRes int layouId);
關於TyperTextView
這個逐字播放TextView是我改寫自hanks-zyh的HTextView裡面的TyperTextView,修改了不少東西,它是一個TextView,Text,TextSize和TextColor已經在代碼裡面寫了,除了這些屬性還是其他還是可以在xml檔案裡面定義的。
回調
YGuider的回調分為狀態回調OnGuiderChangedListener和點擊回調OnGuiderClickListener:
/** * YGuider狀態變化的回調 */public interface OnGuiderChangedListener { /** * 引導開始時候回調 */ void onGuiderStart(); /** * 跳轉到下一個目標時候的回調 * @param nextIndex 下一個目標的index */ void onGuiderNext(int nextIndex); /** * 引導完成之後的回調 */ void onGuiderFinished();}
/** * 各種點擊事件的回調 */public interface OnGuiderClickListener { /** * 當遮罩層空白處被點擊時候的回調 */ void onMaskClick(); /** * 當下一步按鈕被點擊時的回調 * @param nextIndex 下一目標的index */ void onNextClick(int nextIndex); /** * 當前高亮/掃描目的地區域被點擊時的回調 * @param index 當前目的地區域的index */ void onTargetClick(int index); /** * 當跳過按鈕被點擊時的回調 */ void onJumpClick();}
注意:這些都是介面,實現它們的話就必須重寫裡面的所有方法,所以這裡有一個繼承它們的抽象類別OnGuiderListener實現它的子類的話可以選擇性地重寫一些回調方法(這個設計參考了GestureDetector的SimpleOnGestureDetector),所以有下面設定回調的方法:
/** * 設定點擊回調 * @param guiderClickListener 可以傳入OnGuiderClickListener和OnGuiderListener的子類 */ public void setOnGuiderClickListener(OnGuiderClickListener guiderClickListener){ mMask.setOnGuiderClickListener(guiderClickListener); } /** * 設定狀態回調 * @param onGuiderChangedListener 可以傳入OnGuiderChangedListener和OnGuiderListener的子類 */ public void setOnGuiderChangedListener(OnGuiderChangedListener onGuiderChangedListener){ mMask.setOnGuiderChangedListener(onGuiderChangedListener); } /** * 設定狀態所有回調 * @param onGuiderListener 可以傳入OnGuiderListener的子類 */ public void setOnGuiderListener(OnGuiderListener onGuiderListener){ mMask.setOnGuiderListener(onGuiderListener); }
源碼:http://www.jinhusns.com/Products/Download