云南公司做网站的价格,成品视频软件推荐哪个好一点,5分钟宣传片拍摄价格,湘潭做网站问下磐石网络更新#xff1a;目前该库已更新v2.0版本#xff0c;修改了调用api#xff0c;详细使用可以看#xff1a;可能是最好用的Android引导层库前言每当一个项目开发一个新功能#xff0c;总会想办法及时让用户得知有这样一个新功能#xff0c;这时通常会采用引导页或者蒙版(浮层…更新目前该库已更新v2.0版本修改了调用api详细使用可以看可能是最好用的Android引导层库前言每当一个项目开发一个新功能总会想办法及时让用户得知有这样一个新功能这时通常会采用引导页或者蒙版(浮层)的方式提心用户这里有需要关注的新内容。遇到这种需求最简单的想法就是将引导的布局直接写在对应的页面中在首次打开时显示之后隐藏。但是用这种做法来显示只会出现一次的布局显然有些浪费资源。而且很low完全体现不出OOP的编程思想。我们的项目中原来使用的是http://www.jianshu.com/p/5aa96683d0dc可以看到这是一个非常好的思路通过DecorView来添加引导层引导层的相关代码就可以从activity中抽离出来。高亮则是通过画笔的setXfermode来实现。作者也进行了一定的封装使用的效果也挺好但是我始终对调用的方法感觉不舒服每次使用时要判断是否显示过if(NewbieGuideManager.isNeverShowed(this, NewbieGuideManager.TYPE_COLLECT)) {new NewbieGuideManager(this, NewbieGuideManager.TYPE_COLLECT).addView(mCollect, HoleBean.TYPE_CIRCLE).addView(mTitleTv, HoleBean.TYPE_RECTANGLE).show();}通过下列方法显示出引导层new NewbieGuideManager(MainActivity.this,NewbieGuideManager.TYPE_LIST).addView(view.getChildAt(0).findViewById(R.id.logo), HoleBean.TYPE_RECTANGLE).show();这里还涉及到一个常量NewbieGuideManager.TYPE_LIST需要在manager类中定义并且设置对应的布局mNewbieGuide.setEveryWhereTouchable(false).addIndicateImg(R.drawable.left_arrow, ScreenUtils.dpToPx(mActivity,60), ScreenUtils.dpToPx(mActivity, 110)).addMsgAndKnowTv(这个listview滚动到item6后出现新手引导浮层\n只有点击我知道啦才会想消失,-ScreenUtils.dpToPx(mActivity, 250)).show();并且每增加一种引导浮层就要重复上述3步的过程。优化的NewbieGuide由于非常介意上述的调用方式于是我抽空在上述的思路上自己实现一个小巧的库主要对调用方式进行了封装通过链式调用一行代码就可以实现引导层的实现。Githubhttps://github.com/huburt-Hu/NewbieGuide导入先来看下如何导入项目中项目的build.gradle添加allprojects {repositories {...maven { url https://jitpack.io }}}module的build.gradle添加dependencies {compile com.github.huburt-Hu:NewbieGuide:v1.0.2}使用使用的话非常方便在需要引导层的地方添加如下代码NewbieGuide.with(this)//传入activity.setLabel(guide1)//设置引导层标示用于区分不同引导层必传否则报错.addHighLight(view, HighLight.Type.RECTANGLE)//添加需要高亮的view.setLayoutRes(R.layout.view_guide)//自定义的提示layout不要添加背景色引导层背景色通过setBackgroundColor()设置.show();//显示引导层setLabel(String label)方法需要传入一个当前引导层的标示用于sp缓存当前引导层是否已经显示过因此是一个必须的参数忘了设置的话会抛出异常addHighLight()方法有三个重载第一个参数是需要高亮的view(通常是通过findViewById找到的view)第二个参数是高亮的类型目前有四种矩形圆形椭圆圆角矩形(如果选择圆角矩形的话调用重载3个参数的方法第三个参数是圆角的dp值)默认的话是矩形即只有一个参数的重载。setLayoutRes(int resId,int... id)该方法第一个参数传入xml的布局可以任意编辑如提示的文字颜色位置图片等皆有你来自定义。第二个参数是可变参数传入该布局内需要点击消失引导层的view的id。之所以用这种方式是因为通过代码来调整视图非常麻烦无法直接看到效果我在使用中经常要部署好多次才会确定最终位置远没有layout.xml来实现布局方便。效果效果当然这只是最简单的实现效果具体要如何的界面都可以由你来自定义layout并通过setLayoutRes()方法传入即可。更多配置Controller controller NewbieGuide.with(this).setOnGuideChangedListener(new OnGuideChangedListener() {//设置监听Overridepublic void onShowed(Controller controller) {//引导层显示}Overridepublic void onRemoved(Controller controller) {//引导层消失}}).setBackgroundColor(Color.BLACK)//设置引导层背景色建议有透明度默认背景色为0xb2000000.setEveryWhereCancelable(false)//设置点击任何区域消失默认为true.setLayoutRes(R.layout.view_guide, R.id.textView)//自定义的提示layout,第二个可变参数为点击隐藏引导层view的id.alwaysShow(true)//是否每次都显示引导层默认false.build();//构建引导层的控制器controller.resetLabel(guide1);controller.remove();//移除引导层controller.show();//显示引导层实现原理这个库非常的小总共只有5个类一个接口一个工具类。高亮的实现是通过画笔的setXfermode。即当两个画布上都绘制了图片是可以控制最终显示的样式有取重叠部分有去除重叠部分的等等总共有16中规则具体下图setXfermode属性我所使用的是clear属性即先通过canvas.drawColor(mBackgroundColor);绘制背景色然后通过设置了clear属性的画笔PorterDuffXfermode xfermode new PorterDuffXfermode(PorterDuff.Mode.CLEAR);mPaint.setXfermode(xfermode);镂空出需要高亮的view。view在屏幕的位置可以通过下述方法获取public RectF getRectF() {RectF rectF new RectF();if (mHole ! null) {int[] location new int[2];mHole.getLocationOnScreen(location);rectF.left location[0];rectF.top location[1];rectF.right location[0] mHole.getWidth();rectF.bottom location[1] mHole.getHeight();}return rectF;}mHole就是之前传入的需要高亮的view。余下就是调用的封装了使用了建造者模式来保证链式调用有兴趣的可以clone代码看下也用不了多少时间。后记这个库也是我第一个公开的库目前仅仅实现了基本的功能后续也会不断维护和升级。有什么疑问或者建议或者需要补充的需求都可以回复留言感觉各位阅读我的文章