分类:
新功能(全屏幕引导,局部引导,镂空引导)
新版用户 laucher引导
⚠️
注意:不可以采用1张全屏切图,会被拉伸变形(切小图在xml中展示效果更佳 或者使用fresco放大缩小切图的局部适应整个屏幕被拉
新版用户 laucher引导:
建议采用ViewStub实现
如果分多个阶段,可以参考这样实现:
如果View设置为gone:
It does consume less resources because it does not need to call
onMeasure()
or
onDraw()
,
It is GONE in terms of what is shown on the screen, bu
t it still has a memory mapping in R.java。so it still consumes memory but it does not need to draw the animation and/or consume CPU resources.
大概意思是仍然占用内存
选择ViewStub,不占用内存
新版用户 laucher引导,源码中采用自定义View(PhoneGuideView
),可滑动切换引导页面,可采用HorizontalScrollView实现,并附带原点切换
⚠️
1 为了适配不同的屏幕,这里根据不同的屏幕重新设置dot9图片不同的尺寸大小。
使用的每个
view,都必须先调用
adjustView
方法来先适配屏幕
2 statusbar 和 navigationbar需要隐藏
隐藏方法源代码
View decorView = getWindow().getDecorView();// Hide the status bar,Navigation bar,Actionbar.int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(uiOptions);
|
网上解决方案是:
http://www.cnblogs.com/-cyb/articles/Android_ViewPage_Guide.html
啪啪X采用的方案:启动单独半透明的SplashActivity,使用Viewpager管理所有的页面
新功能
1 全屏引导
1、设置单独半透明的SplashActivity
2、设置搞个半透明遮罩的图片隐藏在布局文件中,通过显示和隐藏引导图片实现引导功能。
3、stub View + PhoneGuideView
4、采用Dialog实现,科普文章:
http://www.cnblogs.com/loulijun/archive/2013/04/09/3010318.html
5、
采用PopUpWindow实现 (实战采用,操作简单,便于管理维护)
6
、GuideBuilder.build模式 (推荐使用
)
2 局部引导解决方案
实战中如果在xml中某个控件周围某个方向上展示引导,推荐使用PopWindow。方式1和方法2区别:
源代码:
方式1 使用popup_window,showAsDropDown、showAsLocation
(获取activity页面焦点)
popupWindow = new PopupWindow(popupLayout,ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,true);
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int popupWidth = popupLayout.getMeasuredWidth();
int popupHeight = popupLayout.getMeasuredHeight();
方式2
Builder模式
(不获取activity页面焦点)
GuideBuilder.build(mActivity)
.setTargetView(pp_video_circle_top_play)
.setContentView(textView)
.setGravity(GuideBuilder.GUIDE_BELOW)
.setCenter(true)
.setMarginTop(ViewUtils.dp2px(mActivity,
.setDuration(3000)
.show();
1、xml引导父布局设置为半透明的背景色。
2、小图标引导,为了节省包大小,改变半透明背景的子View位置
api
箭头控制
hasArrowUp() hasArrowDown()
箭头位置
setArrowMarginLeft() setArrowMarginRight() //右对齐 setArrowCenter() //居中
形象控制
hasPPLeft() hasPPRiht()
居中控制
setCenter(
true
) //设置居中时箭头和目标View中间对齐
本方法的优点
:
上下箭头可动态控制
,中间图可灵活处理,左右上下图像可灵活移动
镂空引导
解释:包围控件A实现某个引导,
方法1: UI切图,漏出头顶,位置不准确
方法2:自定义View,view.getLocationOnScreen()获取高亮布局的文字,100%准确率。
部分内容参考至
-Android 快速实现新手引导层的库
https://github.com/huburt-Hu/NewbieGuide
canvas.saveLayer(0, 0, 1000, 1000, null,
Canvas.MATRIX_SAVE_FLAG |
Canvas.CLIP_SAVE_FLAG |
Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
Canvas.CLIP_TO_LAYER_SAVE_FLAG);
设置透明镂空引导浮层1:
//paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.XOR));
设置引导浮层2:
canvas.drawBitmap(mBackGroundBitmap, 0, 0, paint)
PorterDuffXfermode xfermode = newPorterDuffXfermode(PorterDuff.Mode.CLEAR)
PorterDuffXfermode类绘制出来一个透明空洞有两种mode:
XOR CLEAR
附录: