确定按钮可以设置成在屏幕中间或者在提示文字旁边都可以
如果布局文件中加入了:
android:fitsSystemWindows="true"
那要重写activity的onWindowFocusChanged(boolean hasFocus) 方法 ;在此方法中设置要显示的高亮view
代码如下:@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); //动态添加布局 也可以xml文件中添加布局 lp=new AutoRelativeLayout.LayoutParams(-1,-1); guideView=new UserGuideView(this); guideView.setLayoutParams(lp); rootView.addView(guideView); guideView.setHighLightView(tv_make); guideView.setText("点击“编辑”按钮可以修改视频标题以及添加广告"); guideView.setHighLightStyle(UserGuideView.VIEWSTYLE_CIRCLE); guideView.setTouchOutsideDismiss(false); guideView.setOnNextClickListener(new UserGuideView.OnNextClickListener() { @Override public void onNextClick() { //改变样式 guideView.setHighLightStyle(UserGuideView.VIEWSTYLE_RECT); // guideView.setMaskblurstyle(UserGuideView.MASKBLURSTYLE_NORMAL); } }); guideView.setOnDismissListener(new UserGuideView.OnDismissListener() { @Override public void onDismiss() { } }); }这样就可以把指定的view高亮的显示了:使用targetView.getGlobalVisibleRect(tagetRect);
来确定需要高亮显示的位置下面是一系列设置的方法,可以只提示一个 点击下一步提示多个/** 设置要显示的样式*/ public void setHighLightStyle(int highLightStyle) { this.highLightStyle = highLightStyle; } public void setMaskblurstyle(int maskblurstyle) { this.maskblurstyle = maskblurstyle; } /** 设置要显示的文字*/ public void setText(String text) { this.text = text; } /** 设置要高亮的时候显示的文字数组*/ public void setTipTextArray(String[] tipTexts){ this.tipTexts = tipTexts; } /** 设置要点击时候的title数组*/ public void setTextTitleArray(String[] list){ this.list = list; } /** 清空数组 主要是用于如果单提示和多提示的转换 就需要调用此方法 否则会报错*/ public void resert(){ this.list=null; this.tipTexts = null; } /** * 设置需要高亮的View * * @param targetView */ public void setHighLightView(View targetView) { this.targetView = targetView; invalidate(); } /**删除自己*/ public void removeSelf(){ ((ViewGroup)getParent()).removeView(this); } /** * 设置需要高亮的Views * * @param targetView */ public void setHighLightView(View[] targetView) { this.targetView = targetView[0]; this.views = targetView; invalidate(); } /** 设置是否点击哪里都可以消失*/ public void setTouchOutsideDismiss(boolean cancel) { this.touchOutsideCancel = cancel; } /** * 设置额外的边框宽度 * * @param borderWidth */ public void setBorderWidth(int borderWidth) { this.borderWitdh = borderWidth; } /** * 设置提示的图片 * * @param bitmap */ public void setTipView(Bitmap bitmap) { this.tipBitmap = bitmap; } /** * 设置提示的图片 * * @param bitmap */ public void setTipView(Bitmap[] bitmap) { this.tipBitmaps = bitmap; } /** * 设置蒙版颜色 * * @param maskColor */ public void setMaskColor(int maskColor) { this.maskColor = maskColor; } /** * 设置状态栏高度 默认是减去了一个状态栏高度 如果主题设置android:windowTranslucentStatus=true * 需要设置状态栏高度为0 * * @param statusBarHeight */ public void setStatusBarHeight(int statusBarHeight) { this.statusBarHeight = statusBarHeight; }如果需要在提示了一次后再次提示 可以调用 setVisibility 来继续提示 然后在设置你要提示的内容以及需要高亮显示的View,由于上一次的是隐藏了 所以上一次设置的还在必须再调
<span style="color:#ff6666;">resert() 记住一定要调用此方法 不然会报错!!!!</span>
如果设置了多步提示的话 可以调用接口来监听 这样就可以在设置下一步需要修改的样式了:guideView.setOnNextClickListener(new UserGuideView.OnNextClickListener() { @Override public void onNextClick() { //改变样式 guideView.setHighLightStyle(UserGuideView.VIEWSTYLE_RECT); // guideView.setMaskblurstyle(UserGuideView.MASKBLURSTYLE_NORMAL); } });如果需要在指引完成后做一些事情的话 可以调用:guideView.setOnDismissListener(new UserGuideView.OnDismissListener() { @Override public void onDismiss() { } });在布局文件中话 有以下属性:<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="UserGuideView"> <!--显示的样式--> <attr name="HighlightViewStyle" format="enum"> <enum name="rect" value="0"/> <enum name="circle" value="1"/> <enum name="oval" value="2"/> </attr> <attr name="MaskBlurStyle" format="enum"> <enum name="solid" value="0"/> <enum name="normal" value="1"/> </attr> <!--提示的图片--> <attr name="tipView" format="reference" /> <!--蒙版颜色--> <attr name="maskColor" format="reference|color" /> <!--提示的按钮文字--> <attr name="textcontext" format="string"/> <!--提示的文字内容--> <attr name="tipTexts" format="string|reference"/> </declare-styleable> </resources>
这里是demo地址 可以点击下载
点击打开链接