精华内容
下载资源
问答
  • 新功能指引控件

    2016-10-14 15:54:45
    版本新功能介绍指引控件
  • 一个Android Studio工程:包括自定义View实现新功能指引、ListView中使用策略模式两块内容,附带个人分析文档,希望能相互学习
  • 一般来说很多APP在第一次安装启动后都会有个新手引导的过程,不过每家采用的方式不同。最近做到这块内容我就不再造轮子【其实是自己造不出来…】找到一个比较美观的新手引导层框架。 TourGuide介绍 ...

    一般来说很多APP在第一次安装启动后都会有个新手引导的过程,不过每家采用的方式不同。最近做到这块内容我就不再造轮子【其实是自己造不出来…】找到一个比较美观的新手引导层框架。

    TourGuide介绍

    一个关于新手引导层的框架,界面较为美观,自定义属性也比较好。
    TourGuide框架

    使用

    在build.gradle导入框架

    
    repositories {
        mavenCentral()
        maven(){
            url "https://oss.sonatype.org/content/repositories/snapshots"
        }
    }
    compile ('com.github.worker8:tourguide:1.0.17-SNAPSHOT@aar'){
        transitive=true
    }
    

    老规矩缺哪儿补哪儿

    至于多种效果我就不再一一展示,这里只上我的Demo演示。

    布局文件

    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <Button
            android:id="@+id/btnMain"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="BUTTON" />
    
    </LinearLayout>
    

    一个button放在左上角

    MainActivity

    
    public class MainActivity extends AppCompatActivity {
    
        private Button btnMain;
        private TourGuide tourGuide;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
            btnMain = (Button) findViewById(R.id.btnMain);
            tourGuide = TourGuide.init(this).with(TourGuide.Technique.HorizontalRight);
        }
    
    
        @Override
        protected void onPostCreate(@Nullable Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            btnMain.post(new Runnable() {
                @Override
                public void run() {
                    initBtnGuide(tourGuide);//放在异步线程确保能获取到view的宽高
                }
            });
        }
    
        /**
         * 初始化指导蒙层
         *
         * @param tourGuide TourGuide框架遮盖层
         */
        private void initBtnGuide(TourGuide tourGuide) {
            tourGuide.setToolTip(
                    new ToolTip()
                            .setShadow(true)
                            .setBackgroundColor(getResources().getColor(R.color.DodgerBlue))
                            .setDescription("click here to open the menu")
                            .setGravity(Gravity.RIGHT)
            );
            tourGuide.setOverlay(new Overlay().setStyle(Overlay.Style.Circle).setHoleRadius(btnMain.getWidth() / 2 + 50));
            tourGuide.playOn(btnMain);
        }
    }
    

    使用起来很简单一步到位,其中要注意的是我这里是针对View获取宽度并且留了一定的间隔。如果不知道为啥这么写的,自行百度获取View的宽高。

    效果

    其他

    官方的依赖是有bug的,不能改变tip的文字颜色,如果对此属性有需求的可以自行打包module自己修改,很简单这里不再赘述。
    官方demo如果打不开的,就吧build.gradle下的最后一行删掉同步即可。

    展开全文
  • Android新功能用户指引UserGuide

    千次阅读 2017-10-10 15:05:13
    Android新功能用户指引UserGuide

    一个简单的新功能指引的View,给整个窗口加蒙层,然后高亮需要指引用户此次单独了解的View,并附带展示一个tipView进行简短说明。

    使用:

    工程的gradle文件中:

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

    然后是主Module gradle

    compile 'com.github.yilylong:UserGuideView:v1.0.1'

    然后在需要引导用户的布局中,加入UserGuideView,如果是希望给全部内容添加蒙层,则需要设置UserGuideView的宽高和根layout的宽高相同

        <com.zhl.userguideview.UserGuideView
            android:id="@+id/guideView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:HighlightViewStyle="rect"
            app:MaskBlurStyle="solid"
            app:maskColor="#94242323"
            app:tipView="@mipmap/ic_menu_add" />
    此处的几个属性分别是

    • app:HighlightViewStyle 高亮View的区块形状“rect” “oval” “circle”
    • app:MaskBlurStyle 高亮框边缘模糊效果 normal/solid
    • app:maskColor 蒙层颜色
    • app:tipView 提示的图片
    然后就是在我们的业务逻辑代码中

    guideView.setHighLightView(targetView);
    指定需要高亮的targetView

    然后我们可以根据版本号,以及用户是否是在该版本下第一次打开APP,设置该版本下是否展示相应的引导蒙层。

    展开全文
  • 新手指引功能实现

    千次阅读 2016-11-10 17:07:01
    新手指引功能实现在本期版本更新的需求中添加了手指引页功能,从网上看了去多大神的实现方式,有用自定义View来自己挖透明区域的,也有透明图来实现遮盖的,时间紧迫就采用UI给图遮盖的实现方式。 自己简单的用...

    新手指引页功能实现

    在本期版本更新的需求中添加了新手指引页功能,从网上看了去多大神的实现方式,有用自定义View来自己挖透明区域的,也有透明图来实现遮盖的,时间紧迫就采用UI给图遮盖的实现方式。
    自己简单的用Dialog来实现的,思路就是将Dialog设置成了全屏的,然后找到你要添加蒙板的地方,给他设置上图片即可
    具体实现方式请看代码,估计你能看懂~代码添加还算可以~
    在这将几个方法说明一下即可:
    setGuideStyle(Context context, int themeResId, int laytouResId)
    设置Dialog的样式以及布局ID,本文使用的布局只需要一个跟标签即可,需要给一个默认的style和layout
    setImageRes(Context context, int imgResId, Direction direction, int topMargin)
    设置图片的ID,其中的Direction是自定义方向,注意最后的topMargin,指的是显示的图片距离TOP的边距,特别注意的是,做机型适配的时候,需要将状态栏的高度也算进去
    同时还监听了Dialog显示的时候的返回键按下,通过接口回调,传递你自己要处理的事件~

    比较简单的解释~希望以后继续改进了~~

    public class GuideViewUtils {
    private static GuideViewUtils instance;
    private static Dialog dialog;
    private View view;
    private RelativeLayout rl_dismiss;
    //    private ImageView iv_show;
    private RelativeLayout.LayoutParams params;
    private final String TAG = getClass().getSimpleName();
    private OnClickCallback onclickListener;
    
    /**
     * 私有构造
     */
    private GuideViewUtils() {
    }
    
    public static GuideViewUtils getInstance() {
        if (instance == null) {
            instance = new GuideViewUtils();
        }
        return instance;
    }
    
    /**
     * 设置Dialog样式
     * 都传0的时候使用默认样式
     *
     * @param context     上下文对象
     * @param themeResId  样式ID
     * @param laytouResId layout布局ID
     * @return this
     */
    public GuideViewUtils setGuideStyle(Context context, int themeResId, int laytouResId) {
        if (themeResId == 0) {
            dialog = new Dialog(context, R.style.guideDialog);
            view = View.inflate(context, R.layout.layout_guideview, null);
        } else {
            dialog = new Dialog(context, themeResId);
            view = View.inflate(context, laytouResId, null);
        }
        return this;
    }
    
    /**
     * 设置图片资源ID、显示位置
     *
     * @param context   上下文
     * @param imgResId  资源ID
     * @param direction 方向
     * @param topMargin margin_top
     * @return this
     */
    public GuideViewUtils setImageRes(Context context, int imgResId, Direction direction, int topMargin) {
        rl_dismiss = (RelativeLayout) view.findViewById(R.id.rl_dismiss);
        ImageView imageView = new ImageView(context);
        if (imgResId != 0) {
            imageView.setImageResource(imgResId);//设置图片资源ID
        }
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        switch (direction) {
            case RIGHT_TOP://右上角的
                rl_dismiss.setGravity(Gravity.RIGHT | Gravity.TOP);
                break;
            case BOTTOM://底部居中
                rl_dismiss.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
                break;
            case TOP_CENTER_HORIZONTAL://需要手动设置margin_top
                rl_dismiss.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL);
                if (topMargin != 0) {
                    layoutParams.topMargin = topMargin;//设置margin_top
                }
                break;
            default:
                break;
        }
        imageView.setLayoutParams(layoutParams);
        imageView.requestLayout();
        rl_dismiss.addView(imageView);
    
        dialog.setContentView(view);
        rl_dismiss.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
                onclickListener.onClickedGuideView();
            }
        });
        return this;
    }
    
    /**
     * 设置全屏,获取屏幕尺寸
     *
     * @return
     */
    public GuideViewUtils setGuideGravity() {
        Window dialogWindow = dialog.getWindow();
        dialogWindow.setGravity(Gravity.CENTER);
        WindowManager m = dialogWindow.getWindowManager();
        Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
        WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值
        Log.e(TAG, "屏幕宽度           Width = " + d.getWidth() + "                  Height : " + d.getHeight());
        p.width = d.getWidth(); // 宽度设置为屏幕宽度
        p.height = WindowManager.LayoutParams.MATCH_PARENT;
        dialogWindow.setAttributes(p);
        return this;
    }
    
    /**
     * 显示
     *
     * @return
     */
    public GuideViewUtils show() {
        dialog.setCanceledOnTouchOutside(true);
        //简单的方法是直接设置        dialog.setCancelable(false);     立解囧况
        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    L.e("IVEN", "在Dialog显示的时候,点击了 返回键 ........");
                    dialog.dismiss();
                    onclickListener.onClickedGuideView();//回调
                    return true;
                } else {
                    return false;
                }
            }
        });
        dialog.show();
        return this;
    }
    
    /**
     * 方向枚举设置
     * OTHER:表示不需要具体的方向,是需要自己设置具体的边距的
     */
    public enum Direction {
        LEFT,
        TOP,
        RIGHT,
        /**
         * 居底
         */
        BOTTOM,
        LEFT_TOP,
        LEFT_BOTTOM,
        /**
         * 水平居中、向上
         */
        TOP_CENTER_HORIZONTAL,
        /**
         * 右上角
         */
        RIGHT_TOP,
        RIGHT_BOTTOM,
        OTHER
    }
    
    /**
     * Callback
     */
    public interface OnClickCallback {
        void onClickedGuideView();
    }
    
    public GuideViewUtils setOnclickListener(OnClickCallback onclickListener) {
        this.onclickListener = onclickListener;
        return this;
    }
    

    }“


    样式:

        <style name="guideDialog" parent="@android:style/Theme.Holo.Light.Dialog">
        <item name="android:windowFrame">@null</item>
        <!--是否浮在activity上-->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <!-- 是否有title -->
        <item name="android:windowNoTitle">true</item>
        <!--dialog背景 -->
        <item name="android:background">@android:color/transparent</item>
        <!-- 模糊 不设置背景不是半透明的 -->
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
    
    展开全文
  • 公众号赞赏功能指引 一、赞赏账户开通的条件是什么? 2018年6月6号起,公众号每以同一作者名发表3篇或3篇以上的原创文章,即可创建一个赞赏账户,用于赞赏收款。同一公众号最多可以邀请开通3个赞赏账户。 二、如何...

    公众号赞赏功能指引

    一、赞赏账户开通的条件是什么?

    2018年6月6号起,公众号每以同一作者名发表3篇或3篇以上的原创文章,即可创建一个赞赏账户,用于赞赏收款。同一公众号最多可以邀请开通3个赞赏账户。

    二、如何开通赞赏账户?

    1.满足条件的公众号,可以进入“赞赏”功能,页面会有邀请按钮,点击后即可邀请个人微信号开通赞赏账户
    在这里插入图片描述
    温馨提示:
    1)需填写个人微信的微信号,填写微信绑定的手机或QQ无法邀请,且对方需要已关注该公众号;
    2)若对方已注册,无法再邀请;3)发出邀请24小时未注册则释放名额,名额的消耗和释放会通过站内信通知。

    2.发送邀请后,个人微信会收到邀请通知

    在这里插入图片描述

    打开通知会进入开通赞赏账户的小程序,需要填写以下信息:

    赞赏账户名:名称只允许含有中文、英文大小写,长度为4-30个字符(1个汉字占1个字符)。赞赏账户、公众号、小程序,遵循全平台名称唯一。同主体或同管理员的情况下,赞赏账户名称可以和公众号、小程序保持一致。名称不得涉及侵权、违反法律法规以及平台运营规范的内容;
    简介:长度4-120个字符,不得涉及侵权、违反法律法规以及平台运营规范的内容;
    性别:设置作者性别;
    地区:填写作者地区;
    实名信息:(实名信息不会对外展示),且需与当前操作的个人微信实名信息一致,提交后实名信息不支持修改,每个人(以身份证统计)只能开通一个赞赏账户。

    三、“赞赏账户”小程序相关说明(管理赞赏账户)

    1.从邀请绑定的模板消息进入小程序可以注册,从其他渠道打开小程序会提示无法注册,该小程序的所有页面无法分享。

    2.进入“赞赏账户”小程序,点击上方的作者名-“我的信息”,即可修改作者信息。
    温馨提示:实名信息无法修改,赞赏账户名只能修改一次,其他信息无修改次数限制。

    3.在“赞赏账户”小程序,点击上方的作者名-“收款公众号”,可以添加或移除设置自己作为原创文章赞赏收款账户的公众号。

    在这里插入图片描述
    4.收款设置:作者可以设置赞赏的六个金额和一句引导语,引导语对全局生效,即每篇文章的赞赏都展示这条,修改引导语也会影响已发布的文章。赞赏支持回复读者,会以“微信公众平台”官方公众号的名义通过服务通知下发,每个赞赏只能回复一次。

    四、“喜欢作者”功能(即赞赏)
    在这里插入图片描述
    作者授权公众号后,公众号群发文章可以选择已授权的作者,文章若有勾选“赞赏”读者阅读文章时在底部会有“喜欢作者”选项,读者可以自愿赞赏作者,赞赏的资金平台会结算到开通作者的个人微信号,结算周期为T+7。作者可以通过“赞赏账户”小程序查看赞赏明细。

    五、如何修改赞赏账户名
    登录在“赞赏账户”小程序的管理端,点击名字-“我的信息”-名字,就可以进入改名流程。每个帐号只有一次改名机会,请您慎重考虑。
    旧名字将会有7天的保护期,在7天内可以撤销新名字,恢复原来名称,如果不选择恢复,7天后旧名称就会释放,其他人都可以注册这一名称。需要注意的是,撤销也会占用改名机会,撤销后也不能再进行修改。

    六、历史文章展示在赞赏账户介绍页
    1、登录公众平台,进入“原创管理”,点击“历史文章展示在赞赏账户介绍页”

    在这里插入图片描述

    2、选择一个赞赏账户,勾选需要展示的文章,然后点击“确定”,系统会向赞赏账户对应的个人微信号发送确认通知,点开通知确认后即可。
    在这里插入图片描述

    温馨提示:1. 只能对赞赏功能升级上线之前(2018年6月6号之前)的原创文章设置;

    1. 每篇文章只能设置1次;

    2. 设置成功后只是展示在赞赏账户的介绍页,文章原有的内容、作者名都不会改变。如果文章原本有开启赞赏,依然是赞赏给公众号,而非赞赏账户。

    展开全文
  • 求大神指点,如果有demo,麻烦传一份~ huaxuhai@163.com
  • 前段时间自己找的一个JS插件,作为网站功能新用户指引很好很强大!
  • WPF 实现新手指引功能 DEMO

    千次阅读 2017-08-11 11:18:27
    需求 1.接口化.其他人实现接口就行 2.动态定位到visualTree中任意控件位置,即随意只显示任何部位 3.指示文本控件和箭头控件随意更改(位置,大小,高度,偏移等基本属性) 4.抽出主题 [demo中未实现] 5....
  • 引入js文件 [removed][removed] [removed][removed] [removed][removed] 基于jquery.mobile插件实现的jQuery页面功能分步指引介绍代码,网页新功能步骤引导介绍动画特效。
  • 这是一款基于jquery.mobile插件实现的jQuery页面功能分步指引介绍代码,网页新功能步骤引导介绍动画特效。
  • 新手指引

    2019-10-05 21:53:39
    1、拆分成指引小组 把指引步骤,尽量拆分的细一些。比如,虽然创建英雄祭坛和招募英雄是连续的步骤,但是,应该拆分成两组指引,创建,招募各代表一组。最理想的情况是,每一步只跟服务器进行一次信息同步。这样,...
  • App半透明指引(第一次进去app的新功能或者版本更新之后使用)
  • APP第一次安装的时候,启动以后出现浮层;新手指引功能
  • Confluence 也是 Atlassian 出品的软件,用于企业知识管理与协同。强大的编辑和站点管理特征,以及权限管理能力,能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。Confluence 与 Jira 配合一起使用,...
  • 当一个网站或者一个Web应用推出新功能时,为了让用户了解你的站点(或应用)如何操作,往往都会在站点(应用)中添加一个分步指引的效果。然而这样的效果,对于不懂原生JS的同学来说,是件很头痛的事情。下面为大家...
  • 系统的新手指引的设计

    千次阅读 2017-04-25 17:37:48
    对于注册用户,不管是旧菜单,还是菜单,...不管是旧菜单,还是菜单,都可能因为发生重大变更而要求重新出现新手指引。而且可能出现第一次变更、第二次变更、第三次变更。。。。每次变更都要求重新出现新手指引
  • 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便用户快速了解操作你的应用功能。新手指引的重要性,不言而喻。本文搜集整理了Github上一些效果不错的...
  • Unity新手引导功能开发,全屏逐渐聚焦到引导触发按钮,有圆形聚焦,矩形聚焦
  • 接下来说一说用法,功能都在HintView这个类里,主要方法有: 1、setTargetView(); 将所要指向的目标view传进去,里面会自动对目标view大小与坐标进行测量,然后在蒙层上复制抠出一个完全透明的view,即可完全展示...
  • 开源整理:Android App新手指引开源控件 一个App第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便用户快速了解操作你的应用功能。新手指引的重要性,不言而喻。...
  • 实用jQuery新手指引流程引导插件Intro.Js,不错的JS特效,一般用在新功能上线后,对用户的 操作进行引导,也用在新手帮助方面,此JS插件支持键盘左右键切换引导,支持enter进入下一步 ,支持ESC取消引导,还是很...
  • 一个 App 第一次与用户接触或者发生大版本更新时,常常会用户进行新手引导,而一个好的新手指引,往往能够方便用户快速了解操作你的应用功能。新手指引的重要性,不言而喻。本文作者@D_clock爱吃葱花搜集整理了 ...
  • Android Studio新手完全指引

    千次阅读 2015-06-12 09:38:37
    1)不要使用Android Studio的自动迁移功能将项目从Eclipse自动转换为Android Studio工程结构,建议重新建立一个纯净的Android Studio工程,并手动拷贝src和lib等文件; 2)Android Studio不要复用Eclipse之前...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,386
精华内容 13,754
关键字:

新增功能指引