{"id":18764026,"url":"https://github.com/shichunlei/mylibrary","last_synced_at":"2025-08-17T14:03:38.752Z","repository":{"id":95785319,"uuid":"88002049","full_name":"shichunlei/MyLibrary","owner":"shichunlei","description":"搜集的一些项目会用到的自定义控件，整合到一个library","archived":false,"fork":false,"pushed_at":"2018-08-01T01:59:16.000Z","size":22359,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-13T04:51:30.320Z","etag":null,"topics":["circle-menu","java","labelview","library","marqueeview","smoothcheckbox"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shichunlei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-12T02:43:59.000Z","updated_at":"2022-02-28T06:49:51.000Z","dependencies_parsed_at":"2023-04-15T20:16:48.762Z","dependency_job_id":null,"html_url":"https://github.com/shichunlei/MyLibrary","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/shichunlei/MyLibrary","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shichunlei%2FMyLibrary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shichunlei%2FMyLibrary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shichunlei%2FMyLibrary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shichunlei%2FMyLibrary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shichunlei","download_url":"https://codeload.github.com/shichunlei/MyLibrary/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shichunlei%2FMyLibrary/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270856775,"owners_count":24657700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["circle-menu","java","labelview","library","marqueeview","smoothcheckbox"],"created_at":"2024-11-07T18:28:23.262Z","updated_at":"2025-08-17T14:03:38.714Z","avatar_url":"https://github.com/shichunlei.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MyLibrary\n\n    优秀框架、自定义控件大搜集，再此特别感谢原作者们。\n\n[![](https://jitpack.io/v/shichunlei/MyLibrary.svg)](https://jitpack.io/#shichunlei/MyLibrary)\n\n**Include**\n\n- **AlertDialog**\n\n- **BottomDialog**\n\n- **ProgressDialog**\n\n- **RoundImageView**\n\n    圆形图片、圆角图片、椭圆图片\n\n    [原始项目地址](https://github.com/RaphetS/RoundImageView)\n\n- **RoundTextView**\n\n    基于TextView 1.直接设置selector背景2.直接设置drawableLeft大小 3.圆角，圆形，背景/边框/文字根据状态变色\n    \n    [原项目地址](https://github.com/RuffianZhong/RTextView)\n\n- **SmoothCheckBox**\n\n    [原始项目地址](https://github.com/andyxialm/SmoothCheckBox)\n\n- **ExpandIconView**\n\n    [原始项目地址](https://github.com/zagum/Android-ExpandIcon)\n\n- **FlipView**\n\n    可翻转的View，仿支付宝-蚂蚁宝卡里流量兑换的翻转View\n\n    [参考项目地址](https://github.com/wajahatkarim3/EasyFlipView)\n\n- **NumberAnimTextView**\n\n    带数字增加动画的TextView\n\n    [原始项目地址](https://github.com/Bakumon/NumberAnimTextView)\n\n- **LabelView**\n\n    角标,一个简单的Android标签控件.\n\n    [原始项目地址](https://github.com/H07000223/FlycoLabelView)\n\n- **LoadingView**\n\n    加载动画\n\n- **ExpandTextView**\n\n    可展开、折叠的TextView\n    \n    [原始项目地址](https://github.com/lcodecorex/ExpandTextView)\n\n- **SmallBang**\n\n    twitter like animation for any view\n    \n    [原始项目地址](https://github.com/hanks-zyh/SmallBang)\n    \n- **WaveLoadingView**\n\n    水波效果 An Android library providing to realize wave loading effect.\n    \n    [原始项目地址](https://github.com/tangqi92/WaveLoadingView)\n\n- **SearchView**\n\n    搜索View\n\n- **RadarView**\n\n    雷达图\n\n    [参考项目地址](https://github.com/qstumn/RadarChart)\n   \n- **RangeSeekBar**\n\n    A beautiful SeekBar that supports bidirectional range selection and normal SeekBar mode, supports scale, negative numbers and a variety of powerful custom properties (一款漂亮美观的支持双向范围选择和普通SeekBar模式的SeekBar，支持刻度、负数以及多种强大的自定义属性)\n    \n    [原始项目地址](https://github.com/Jay-Goo/RangeSeekBar)\n    \n- **SwitchButton**\n\n    SwitchButton.An beautiful+lightweight+custom-style-easy switch widget for Android\n    \n    [原始项目地址](https://github.com/zcweng/SwitchButton)\n    \n- **StateView**\n\n    StateView 一个轻量级的控件, 继承自 View, 吸收了 ViewStub 的一些特性, 初始状态下是不可见的, 不占布局位置, 占用内存少。 当进行操作显示空/重试/加载视图后, 该视图才会被添加到布局中。\n    \n    [原项目地址](https://github.com/nukc/StateView)\n    \n- **StickyHeaderDecoration**\n\n    A sticky header decoration, use for recyclerview\n    \n    [原项目地址](https://github.com/qdxxxx/StickyHeaderDecoration)\n    \n- **IndexBarLayout**\n\n    Similar to the letter to the right of the phone's contacts\n    \n    [原项目地址](https://github.com/qdxxxx/IndexBarLayout)\n\n- **IntegerRulerView/DecimalRulerView/RulerView**\n\n    刻度尺\n\n- **CircleMenu**\n\n    CircleMenu is a simple, elegant UI menu with a circular layout and material design animations. \n\n    [原项目地址](https://github.com/Ramotion/circle-menu-android)\n\n- **MarqueeView**\n\n    俗名：可垂直跑、可水平跑的跑马灯\n    学名：可垂直翻、可水平翻的翻页公告\n\n    [原项目地址](https://github.com/sfsheng0322/MarqueeView)\n\n- **AnimNumberTextView**\n\n    滚动显示TextView的数字,支持自定义每个字符速度。\n    \n    [原项目地址](https://github.com/AndroidMsky/RandomTextView)\n\n- **ThreeStateSwitch**\n\n    A simple three-state switch view for Android.\n    \n    [原项目地址](https://github.com/abbas-oveissi/ThreeStateSwitch)\n\n- **SwitchIconView**\n\n    Google launcher-style implementation of switch (enable/disable) icon\n\n    [原项目地址](https://github.com/zagum/Android-SwitchIcon)\n\n- **DescProgressView**\n\n    带进度带描述的view\n\n    [原项目地址](https://github.com/GuoFeilong/DescPbView)\n\n- **WavyLineView**\n\n    波浪线\n\n    [原项目地址](https://github.com/andyxialm/WavyLineView)\n\n- **CouponView**\n\n    半圆锯齿背景虚线边框组合实现简单优惠券效果，可实现一些简单组合\n    \n    [原项目地址](https://github.com/dongjunkun/CouponView)\n\n- **RippleView**\n\n    简单的涟漪效果\n    \n    [原项目地址](https://github.com/LiqiNew/RippleDemo)\n\n- **工具类**\n\n    StringUtils、TimeUtils、SPUtils、JsonUtils、ViewUtils、ScreenUtils、AnimatorUitls（部分参考于SwitchLayout）、HttpUtils、FileUtils、AppUitls、IdcardUtil、StatusBarHelper、RandomUtils、ConversionUtils等\n\n- **基类**\n\n    BaseApplication、BaeActivity、BaseFragment、LazyFragment、CommonAdapter、CommonRecyclerAdapter\n\n**Version**\n\n    【0.3.0】\n\n# Installation\n\nStep 1. Add the JitPack repository to your build file\n\n    Add it in your root build.gradle at the end of repositories:\n\n\tallprojects {\n\t\trepositories {\n\t\t\t...\n\t\t\tmaven { url 'https://jitpack.io' }\n\t\t}\n\t}\n\nStep 2. Add the dependency\n\n    dependencies {\n        compile 'com.github.shichunlei:MyLibrary:0.3.0'\n    }\n\n或者\n\nStep 1. Add the JitPack repository to your build file\n\n    \u003crepositories\u003e\n        \u003crepository\u003e\n            \u003cid\u003ejitpack.io\u003c/id\u003e\n            \u003curl\u003ehttps://jitpack.io\u003c/url\u003e\n        \u003c/repository\u003e\n    \u003c/repositories\u003e\n\nStep 2. Add the dependency\n\n    \u003cdependency\u003e\n\t    \u003cgroupId\u003ecom.github.shichunlei\u003c/groupId\u003e\n\t    \u003cartifactId\u003eMyLibrary\u003c/artifactId\u003e\n\t    \u003cversion\u003e0.3.0\u003c/version\u003e\n\t\u003c/dependency\u003e\n\n# Usage\n\n    参见sample示例\n\n===========================================================================================\n\n### MarqueeView 用法\n\n\u003cimg src=\"/screenshot/MarqueeView.gif\" style=\"width: 30%;\"\u003e\n\n###### 属性\n\n| Attribute 属性          | Description 描述 | \n|:---\t\t\t\t     |:---| \n| mvAnimDuration         | 一行文字动画执行时间 | \n| mvInterval         | 两行文字翻页时间间隔 | \n| mvTextSize         | 文字大小 | \n| mvTextColor         | 文字颜色 | \n| mvGravity         | 文字位置:left、center、right | \n| mvSingleLine         | 单行设置 |\n| mvDirection        | 动画滚动方向:bottom_to_top、top_to_bottom、right_to_left、left_to_right | \n\n###### XML\n\n    \u003cchingtech.library.widget.MarqueeView\n        android:id=\"@+id/marqueeView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        app:mvAnimDuration=\"1000\"\n        app:mvDirection=\"bottom_to_top\"\n        app:mvInterval=\"3000\"\n        app:mvTextColor=\"@color/white\"\n        app:mvTextSize=\"14sp\"\n        app:mvSingleLine=\"true\"/\u003e\n\n###### 设置字符串列表数据\n\n    MarqueeView marqueeView = (MarqueeView) findViewById(R.id.marqueeView);\n\n    List\u003cString\u003e info = new ArrayList\u003c\u003e();\n    info.add(\"1. 大家好，我是孙福生。\");\n    info.add(\"2. 欢迎大家关注我哦！\");\n    info.add(\"3. GitHub帐号：sfsheng0322\");\n    info.add(\"4. 新浪微博：孙福生微博\");\n    info.add(\"5. 个人博客：sunfusheng.com\");\n    info.add(\"6. 微信公众号：孙福生\");\n    marqueeView.startWithList(info);\n\n    // 在代码里设置自己的动画\n    marqueeView.startWithList(info, R.anim.anim_bottom_in, R.anim.anim_top_out);\n\n###### 设置字符串数据\n\n    String notice = \"心中有阳光，脚底有力量！心中有阳光，脚底有力量！心中有阳光，脚底有力量！\";\n    marqueeView.startWithText(notice);\n    \n    // 在代码里设置自己的动画\n    marqueeView.startWithText(notice, R.anim.anim_bottom_in, R.anim.anim_top_out);\n\n###### 设置事件监听\n\n    marqueeView.setOnItemClickListener(new MarqueeView.OnItemClickListener() {\n        @Override\n        public void onItemClick(int position, TextView textView) {\n            Toast.makeText(getApplicationContext(), String.valueOf(marqueeView1.getPosition()) + \". \" + textView.getText(), Toast.LENGTH_SHORT).show();\n        }\n    });\n\n###### 重影问题可参考以下解决方案\n\n    @Override\n    public void onStart() {\n        super.onStart(); \n        marqueeView.startFlipping();\n    }\n\n    @Override\n    public void onStop() {\n        super.onStop();\n        marqueeView.stopFlipping();\n    }\n\n===========================================================================================\n\n### CircleMenu 用法\n\n\u003cimg src=\"/screenshot/preview.gif\" style=\"width: 30%;\"\u003e\n\nPlace the `CircleMenuView` in your layout and set the icons and colors of the buttons, as shown below.\n\n    app:button_colors=\"@array/colors\"\n    app:button_icons=\"@array/icons\"\n\n\nExample of arrays `colors` and `icons` in `res\\values\\buttons.xml`:\n\n    \u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n    \u003cresources\u003e\n        \u003carray name=\"icons\"\u003e\n            \u003citem\u003e@drawable/ic_home_white_24dp\u003c/item\u003e\n            \u003citem\u003e@drawable/ic_search_white_24dp\u003c/item\u003e\n            \u003citem\u003e@drawable/ic_notifications_white_24dp\u003c/item\u003e\n            \u003citem\u003e@drawable/ic_settings_white_24dp\u003c/item\u003e\n            \u003citem\u003e@drawable/ic_place_white_24dp\u003c/item\u003e\n        \u003c/array\u003e\n        \u003carray name=\"colors\"\u003e\n            \u003citem\u003e@android:color/holo_blue_light\u003c/item\u003e\n            \u003citem\u003e@android:color/holo_green_dark\u003c/item\u003e\n            \u003citem\u003e@android:color/holo_red_light\u003c/item\u003e\n            \u003citem\u003e@android:color/holo_purple\u003c/item\u003e\n            \u003citem\u003e@android:color/holo_orange_light\u003c/item\u003e\n        \u003c/array\u003e\n    \u003c/resources\u003e\n\n\nOr use the constructor\n\n    CircleMenuView(@NonNull Context context, @NonNull List\u003cInteger\u003e icons, @NonNull List\u003cInteger\u003e colors)\n\nto add `CircleMenuView` and configure the buttons programmatically (in the code).\n\nNext, connect the event handler `CircleMenuView.EventListener` as shown below,\nand override the methods you need.\n\n\n    final CircleMenuView menu = (CircleMenuView) findViewById(R.id.circle_menu);\n    menu.setEventListener(new CircleMenuView.EventListener() {\n        @Override\n        public void onMenuOpenAnimationStart(@NonNull CircleMenuView view) {\n            Log.d(\"D\", \"onMenuOpenAnimationStart\");\n        }\n    \n        @Override\n        public void onMenuOpenAnimationEnd(@NonNull CircleMenuView view) {\n            Log.d(\"D\", \"onMenuOpenAnimationEnd\");\n        }\n    \n        @Override\n        public void onMenuCloseAnimationStart(@NonNull CircleMenuView view) {\n            Log.d(\"D\", \"onMenuCloseAnimationStart\");\n        }\n    \n        @Override\n        public void onMenuCloseAnimationEnd(@NonNull CircleMenuView view) {\n            Log.d(\"D\", \"onMenuCloseAnimationEnd\");\n        }\n    \n        @Override\n        public void onButtonClickAnimationStart(@NonNull CircleMenuView view, int index) {\n            Log.d(\"D\", \"onButtonClickAnimationStart| index: \" + index);\n        }\n    \n        @Override\n        public void onButtonClickAnimationEnd(@NonNull CircleMenuView view, int index) {\n            Log.d(\"D\", \"onButtonClickAnimationEnd| index: \" + index);\n        }\n    });\n\n| Attribute 属性          | Description 描述 | \n|:---\t\t\t\t     |:---| \n|button_icons|Array of buttons icons.|\n|button_colors|Array of buttons colors.|\n|icon_menu|Menu default icon.|\n|icon_close|Menu closed icon.|\n|icon_color|Menu icon color.|\n|duration_ring|Ring effect duration.|\n|duration_open|Menu opening animation duration.|\n|duration_close|Menu closing animation duration.|\n|distance|Distance between center button and buttons|\n\n===========================================================================================\n\n### AnimNumberTextView 用法\n\n\u003cimg src=\"/screenshot/3032383935.gif\"\u003e\n\nxml中定义：\n\n    \u003cchingtech.library.widget.AnimNumberTextView\n        android:id=\"@+id/rtv\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"150dp\"\n        android:layout_centerHorizontal=\"true\"\n        android:layout_centerVertical=\"true\"\n        android:gravity=\"center\"\n        android:padding=\"0px\"\n        android:text=\"123456\"\n        android:textSize=\"28sp\" /\u003e\n\n所有位数相同速度滚动：\n\n    mNumberTextView.setText(\"876543\");\n    mNumberTextView.setPianyilian(AnimNumberTextView.ALL);\n    mNumberTextView.start();\n\n从左到右侧由快到慢滚动：\n\n    mNumberTextView.setText(\"12313288\");\n    mNumberTextView.setPianyilian(AnimNumberTextView.FIRSTF_FIRST);\n    mNumberTextView.start();\n\n从左到右侧由慢到快滚动：\n\n    mNumberTextView.setText(\"9078111123\");\n    mNumberTextView.setPianyilian(AnimNumberTextView.FIRSTF_LAST);\n    mNumberTextView.start();\n\n自定义每位数字的速度滚动（每帧滚动的像素）：\n\n    mNumberTextView.setText(\"909878\");\n    pianyiliang[0] = 7;\n    pianyiliang[1] = 6;\n    pianyiliang[2] = 12;\n    pianyiliang[3] = 8;\n    pianyiliang[4] = 18;\n    pianyiliang[5] = 10;\n    mNumberTextView.setPianyilian(pianyiliang);\n    mNumberTextView.start();\n\n自定义滚动行数（默认10行）：\n\n    mNumberTextView.setMaxLine(20);\n\n===========================================================================================\n\n### Switch 用法\n\n\u003cimg src=\"/screenshot/switch.gif\"\u003e\n\n\u003cimg src=\"/screenshot/device-capture.png\"\u003e\n\nXML\n\n    \u003cchingtech.library.widget.SwitchButton\n        android:id=\"@+id/switch_pattern_lock\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_marginRight=\"20dp\"\n        app:sb_background=\"#FFF\"\n        app:sb_button_color=\"#db99c7\"\n        app:sb_checked_color=\"#A36F95\"\n        app:sb_checkline_color=\"#a5dc88\"\n        app:sb_shadow_color=\"#A36F95\"\n        app:sb_uncheckcircle_color=\"#A36F95\" /\u003e\n\nJava\n\n    SwitchButton switchButton = (com.suke.widget.SwitchButton)\n    findViewById(R.id.switch_button);\n\n    switchButton.setChecked(true);\n    switchButton.isChecked();\n    switchButton.toggle();     //switch state\n    switchButton.toggle(false);//switch without animation\n    switchButton.setShadowEffect(true);//disable shadow effect\n    switchButton.setEnabled(false);//disable button\n    switchButton.setEnableEffect(false);//disable the switch animation\n    switchButton.setOnCheckedChangeListener(new SwitchButton.OnCheckedChangeListener() {\n        @Override\n        public void onCheckedChanged(SwitchButton view, boolean isChecked) {\n            //TODO do your job\n        }\n    });\n\nMore Style:\n\n|attr|format|description|\n|---|:---|:---:|\n|sb_shadow_radius|dimension|阴影半径|\n|sb_shadow_offset|dimension|阴影偏移|\n|sb_shadow_color|color|阴影颜色|\n|sb_uncheck_color|color|关闭颜色|\n|sb_checked_color|color|开启颜色|\n|sb_border_width|dimension|边框宽度|\n|sb_checkline_color|color|开启指示器颜色|\n|sb_checkline_width|dimension|开启指示器线宽|\n|sb_uncheckcircle_color|color|关闭指示器颜色|\n|sb_uncheckcircle_width|dimension|关闭指示器线宽|\n|sb_uncheckcircle_radius|dimension|关闭指示器半径|\n|sb_checked|boolean|是否选中|\n|sb_shadow_effect|boolean|是否启用阴影|\n|sb_effect_duration|integer|动画时间，默认300ms|\n|sb_button_color|color|按钮颜色|\n|sb_show_indicator|boolean|是否显示指示器，默认true：显示|\n|sb_background|color|背景色，默认白色|\n|sb_enable_effect|boolean|是否启用特效，默认true|\n\n===========================================================================================\n\n### ThreeStateSwitch 用法\n\n\u003cimg src=\"/screenshot/switch_three.gif\"\u003e\n\nAdd the ThreeStateSwitch in your layout file and customize it the way you like it.\n\n    \u003cchingtech.library.widget.ThreeStateSwitch\n        android:id=\"@+id/threeState\"\n        android:layout_width=\"200dp\"\n        android:layout_height=\"wrap_content\"\n        app:background_selected_color=\"#5bb434\"\n        app:background_normal_color=\"#bfbfbf\"\n        app:text_left=\"左\"\n        app:text_right=\"右\"\n        app:text_selected_color=\"#5bb434\"\n        app:text_normal_color=\"#646464\"\n        app:text_normal_size=\"16sp\"\n        app:text_selected_size=\"20sp\"/\u003e\n\nYou can set a listener for state changes\n\n    threeState.setOnChangeListener(new ThreeStateSwitch.OnStateChangeListener() {\n        @Override\n        public void OnStateChangeListener(int currentState) {\n            //current state=  -1  0  1\n            Toast.makeText(MainActivity.this, String.valueOf(currentState), Toast.LENGTH_SHORT).show();\n        }\n    });\n\nYou can set typeface for texts.\n\n    threeState.setNormalTextTypeface( );\n    threeState.setSelectedTextTypeface( );\n\nGet the current state. \n\n    //state=  -1  0  1\n    threeState.getState();\n\n##### 属性\n\n| Name | Type | Default | Description |\n|:----:|:----:|:-------:|:-----------:|\n|background_selected_color|Color|#5bb434|选中时的背景色|\n|background_normal_color|Color|#bfbfbf|未选中时的背景色|\n|text_normal_color|Color|#646464|未选中的字的颜色|\n|text_selected_color|Color|#5bb434|选中的字的颜色|\n|text_left|String||左侧文字|\n|text_right|String||右侧文字|\n|text_normal_size|Dp or Sp|16sp|未选中的字的大小|\n|text_selected_size|Dp or Sp|16sp|选中的字的大小|\n\n===========================================================================================\n\n### SwitchIconView 用法\n\n\u003cimg src=\"/screenshot/SwitchIconView.gif\"\u003e\n\nSwitchIconView extends from AppCompatImageView so you can set icon with  ```app:srcCompat```\n\nSet any icon (vector or image) to SwitchIconView and enjoy switchable icon in your app :)\n\nUse ```app:siv_tint_color``` to set color to icon. Default color is black;\n\nUse ```app:siv_disabled_color``` to set color when icon disabled. Default color is equals with ```app:siv_tint_color```;\n\nUse ```app:siv_disabled_alpha``` to set alpha when icon disabled. Default alpha is ```.5```;\n\nUse ```app:siv_no_dash``` if you don't want to draw dash, when icon disabled;\n\nUse ```app:siv_animation_duration``` if you want to change switching state animation duration;\n\nUse ```app:siv_enabled``` to set initial icon state;\n\nFully customized implementation:\n\n    \u003cchingtech.library.widget.SwitchIconView\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:padding=\"8dp\"\n        app:si_animation_duration=\"500\"\n        app:si_disabled_alpha=\".3\"\n        app:si_disabled_color=\"#b7b7b7\"\n        app:si_tint_color=\"#ff3c00\"\n        app:si_enabled=\"false\"\n        app:si_no_dash=\"true\"\n        app:srcCompat=\"@drawable/ic_cloud\"/\u003e\n\nPublic methods: \n\n    public void setIconEnabled(boolean enabled);\n    \n    public void setIconEnabled(boolean enabled, boolean animate);\n    \n    public boolean isIconEnabled();\n    \n    public void switchState();\n    \n    public void switchState(boolean animate);\n\n===========================================================================================\n\n### SmoothCheckBox 用法\n\n\u003cimg src=\"/screenshot/smoothcb.gif\"\u003e\n\nAttrs 属性\n\n|attr|format|description|\n|---|:---|:---:|\n|duration|integer|动画持续时间|\n|stroke_width|dimension|未选中时边框宽度|\n|color_tick|color|对勾颜色|\n|color_checked|color|选中时填充颜色|\n|color_unchecked|color|未选中时填充颜色|\n|color_unchecked_stroke|color|未选中时边框颜色|\n\n    setChecked(boolean checked);                   // 默认不带动画，若需要动画 调用重载方法\n    setChecked(boolean checked, boolean animate);  // 参数: animate 是否显示动画\n\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        setContentView(R.layout.activity_sample);\n\n        final SmoothCheckBox scb = (SmoothCheckBox) findViewById(R.id.scb);\n        scb.setOnCheckedChangeListener(new SmoothCheckBox.OnCheckedChangeListener() {\n            @Override\n            public void onCheckedChanged(SmoothCheckBox checkBox, boolean isChecked) {\n                Log.d(\"SmoothCheckBox\", String.valueOf(isChecked));\n            }\n        });\n    }\n\n===========================================================================================\n\n### DecimalRulerView 用法\n\n\u003cimg src=\"/screenshot/rulerview.png\"\u003e\n\nAttrs 属性\n\n    \u003cattr format=\"float\" name=\"rv_defaultValue\" /\u003e              \u003c!-- 默认值 --\u003e\n    \u003cattr format=\"float\" name=\"rv_minValue\" /\u003e                  \u003c!-- 最小值 --\u003e\n    \u003cattr format=\"float\" name=\"rv_maxValue\" /\u003e                  \u003c!-- 最大值 --\u003e\n    \u003cattr format=\"float\" name=\"rv_spanValue\" /\u003e                 \u003c!-- 精度，最小支持0.1 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_itemSpacing\" /\u003e           \u003c!-- 每个刻度间的宽度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_minLineHeight\" /\u003e         \u003c!-- 最短刻度线长度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_maxLineHeight\" /\u003e         \u003c!-- 最长刻度线长度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_middleLineHeight\" /\u003e      \u003c!-- 中间刻度线长度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_minLineWidth\" /\u003e          \u003c!-- 最短刻度线宽度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_maxLineWidth\" /\u003e          \u003c!-- 最长刻度线宽度 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_middleLineWidth\" /\u003e       \u003c!-- 中间刻度线宽度 --\u003e\n    \u003cattr format=\"color\" name=\"rv_scaleTextColor\" /\u003e            \u003c!-- 刻度盘文字颜色 --\u003e\n    \u003cattr format=\"color\" name=\"rv_minLineColor\" /\u003e              \u003c!-- 最短刻度线颜色 --\u003e\n    \u003cattr format=\"color\" name=\"rv_maxLineColor\" /\u003e              \u003c!-- 最大刻度线颜色 --\u003e\n    \u003cattr format=\"color\" name=\"rv_middleLineColor\" /\u003e           \u003c!-- 中间刻度线颜色 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_scaleTextSize\" /\u003e         \u003c!-- 刻度盘文字大小 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_textMarginTop\" /\u003e         \u003c!-- 刻度盘文字距离刻度边缘距离 --\u003e\n    \u003cattr format=\"color\" name=\"rv_indcatorColor\" /\u003e             \u003c!-- 指示器颜色 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_indcatorWidth\" /\u003e         \u003c!-- 指示器宽度，形状为三角时不起作用 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_indcatorHeight\" /\u003e        \u003c!-- 指示器高度，形状为三角时不起作用 --\u003e\n    \u003cattr format=\"enum\" name=\"rv_indcatorType\"\u003e                 \u003c!-- 指示器形状 --\u003e\n        \u003cenum name=\"line\" value=\"1\" /\u003e                          \u003c!-- 线 --\u003e\n        \u003cenum name=\"triangle\" value=\"2\" /\u003e                      \u003c!-- 三角 --\u003e\n    \u003c/attr\u003e\n    \u003cattr format=\"color\" name=\"rv_resultTextColor\" /\u003e           \u003c!-- 结果文字颜色 --\u003e\n    \u003cattr format=\"color\" name=\"rv_unitTextColor\" /\u003e             \u003c!-- 单位文字颜色 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_resultTextSize\" /\u003e        \u003c!-- 结果文字大小 --\u003e\n    \u003cattr format=\"dimension\" name=\"rv_unitTextSize\" /\u003e          \u003c!-- 单位文字大小 --\u003e\n    \u003cattr format=\"string\" name=\"rv_unit\" /\u003e                     \u003c!-- 单位 --\u003e\n    \u003cattr format=\"boolean\" name=\"rv_showResult\" /\u003e              \u003c!-- 是否显示结果 --\u003e\n    \u003cattr format=\"boolean\" name=\"rv_showUnit\" /\u003e                \u003c!-- 是否显示单位 --\u003e\n    \u003cattr format=\"boolean\" name=\"rv_alphaEnable\" /\u003e             \u003c!-- 是否刻度渐变 --\u003e\n\nXML\n\n    \u003cchingtech.library.widget.ruler.DecimalRulerView\n        android:id=\"@+id/ruler_weight\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"120dp\"\n        app:rv_alphaEnable=\"true\"\n        app:rv_indcatorColor=\"#414\"\n        app:rv_indcatorType=\"triangle\"\n        app:rv_indcatorWidth=\"5dp\"\n        app:rv_itemSpacing=\"8dp\"\n        app:rv_maxLineColor=\"#e6e\"\n        app:rv_maxLineHeight=\"30dp\"\n        app:rv_maxLineWidth=\"3dp\"\n        app:rv_middleLineColor=\"#ee2\"\n        app:rv_middleLineHeight=\"20dp\"\n        app:rv_middleLineWidth=\"2dp\"\n        app:rv_minLineColor=\"#e62\"\n        app:rv_minLineHeight=\"10dp\"\n        app:rv_minLineWidth=\"1dp\"\n        app:rv_resultTextColor=\"#444\"\n        app:rv_resultTextSize=\"20sp\"\n        app:rv_scaleTextColor=\"#e42\"\n        app:rv_scaleTextSize=\"15sp\"\n        app:rv_unit=\"CM\"\n        app:rv_unitTextColor=\"#666\"\n        app:rv_unitTextSize=\"15sp\" /\u003e\n\nJava\n\n    mRulerView.initViewParam(20, 0, 100f, 1f);\n    mRulerView.setChooseValueChangeListener(value -\u003e {\n        \n    });\n\n===========================================================================================\n\n### DescProgressView 用法\n\n\u003cimg src=\"/screenshot/progress_view.png\"\u003e\n\nXML\n\n    \u003cchingtech.library.widget.DescProgressView\n        android:id=\"@+id/dpv_test\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"120dp\"\n        android:background=\"@color/white\" /\u003e\n\nJava\n\n    private List\u003cString\u003e descs= new ArrayList\u003c\u003e();\n    DescProgressView descProgressView = findViewById(R.id.dpv_test);\n    descs.add(\"提交\");\n    descs.add(\"上传凭证\");\n    descs.add(\"审核凭证\");\n    descs.add(\"支付赔款\");\n    descs.add(\"审核\");\n    descProgressView.setProgressDescs(descs, 2);\n\n属性\n\n|attr|format|description|\n|---|:---|:---:|\n|dpv_text_normal_color|color| 未选中字体颜色 |\n|dpv_text_seleced_color|color| 选中字体颜色 |\n|dpv_text_size|dimension| 字体大小 |\n|dev_progress_bg_color|color| 选中背景颜色 |\n|dev_progress_small_circle_color|color| 未选中圆点颜色 |\n|dev_progress_big_circle_color|color| 选中圆点颜色 |\n\n===========================================================================================\n\n### WavyLineView 用法\n\n\u003cimg src=\"/screenshot/wavyline.gif\"\u003e\n\nXML\n\n    \u003cchingtech.library.widget.WavyLineView\n        android:id=\"@+id/wavyLineView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"200dp\"/\u003e\n        \nJava\n\n    final WavyLineView wavyLineView = (WavyLineView) findViewById(R.id.wavyLineView);\n    float initPeriod = (float) (2 * Math.PI / 180);\n    wavyLineView.setPeriod(initPeriod);\n    wavyLineView.setAmplitude(25);\n    wavyLineView.setColor(getResources().getColor(R.color.colorAccent));\n    wavyLineView.setStrokeWidth(dp2px(this, 2));\n\n属性\n\n|attr|format|description|\n|---|:---|:---:|\n|period|float||\n|strokeColor|color|线的颜色|\n|amplitude|dimension|振幅|\n|strokeWidth|dimension|线的宽度|\n\n===========================================================================================\n\n### CouponView 用法\n\n\u003cimg src=\"/screenshot/couponView.png\"\u003e\n\n自定义属性说明\n\n| 自定义属性 |格式|说明|\n| :---:|:---:|:---: |\n|cv_dash_line_color|color|虚线的颜色|\n|cv_dash_line_gap|dimension|虚线的间隔|\n|cv_dash_line_height|dimension|虚线的高度|\n|cv_dash_line_length|dimension|虚线的长度|\n|cv_semicircle_color|color|半圆的颜色，一般需要和背景色一致|\n|cv_semicircle_gap|dimension|半圆之前的间隔|\n|cv_semicircle_radius|dimension|半圆的半径|\n|cv_is_semicircle_top|boolean|是否绘制顶部半圆锯齿|\n|cv_is_semicircle_bottom|boolean|是否绘制底部半圆锯齿|\n|cv_is_semicircle_left|boolean|是否绘制左侧半圆锯齿|\n|cv_is_semicircle_right|boolean|是否绘制右侧半圆锯齿|\n|cv_is_dash_line_top|boolean|是否绘制顶部虚线|\n|cv_is_dash_line_bottom|boolean|是否绘制底部虚线|\n|cv_is_dash_line_left|boolean|是否绘制左侧虚线|\n|cv_is_dash_line_right|boolean|是否绘制右侧虚线|\n|cv_dash_line_margin_top|dimension|顶部虚线距离View顶部的距离|\n|cv_dash_line_margin_bottom|dimension|底部虚线距离View底部的距离|\n|cv_dash_line_margin_left|dimension|左侧虚线距离View左侧的距离|\n|cv_dash_line_margin_right|dimension|右侧虚线距离View右侧的距离|\n\n\n添加到你的xml\n\n    \u003cchingtech.library.widget.CouponView\n        xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n        android:id=\"@+id/couponView\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"200dp\"\n        android:background=\"@color/colorAccent\"\n        android:orientation=\"vertical\"\n        android:padding=\"10dp\"\n        app:cv_dash_line_color=\"@android:color/white\"\n        app:cv_dash_line_gap=\"5dp\"\n        app:cv_dash_line_height=\"0.8dp\"\n        app:cv_dash_line_length=\"10dp\"\n        app:cv_dash_line_margin_bottom=\"5dp\"\n        app:cv_dash_line_margin_left=\"5dp\"\n        app:cv_dash_line_margin_right=\"5dp\"\n        app:cv_dash_line_margin_top=\"8dp\"\n        app:cv_is_dash_line_bottom=\"true\"\n        app:cv_is_dash_line_left=\"true\"\n        app:cv_is_dash_line_right=\"true\"\n        app:cv_is_dash_line_top=\"false\"\n        app:cv_is_semicircle_bottom=\"false\"\n        app:cv_is_semicircle_left=\"false\"\n        app:cv_is_semicircle_right=\"false\"\n        app:cv_is_semicircle_top=\"true\"\n        app:cv_semicircle_color=\"@android:color/white\"\n        app:cv_semicircle_gap=\"4dp\"\n        app:cv_semicircle_radius=\"4dp\"\u003e\n    \u003c/chingtech.library.widget.CouponView\u003e\n\n===========================================================================================\n\n### RippleView 用法\n\n\u003cimg src=\"/screenshot/RippleView.gif\"\u003e\n\n自定义属性\n\n| 自定义属性 |格式|说明|\n| :---:|:---:|:---: |\n|image|reference|图片|\n|sqNot|boolean|false是深浅计算，true是浅深计算|\n|starWhat|boolean|是否执行效果|\n|roundRimColor|color|圆边颜色设置|\n|roundRimSize|integer|圆边大小设置|\n\n===========================================================================================\n\n### LabelView 用法\n\n\u003cimg src=\"/screenshot/preview.png\"\u003e\n\n自定义属性\n\n|name|format|description|\n|:---:|:---:|:---:|\n| lv_text | string | 设置文字内容 \n| lv_text_color | color | 设置文字颜色,默认#ffffff\n| lv_text_size | dimension | 设置文字大小,默认11sp\n| lv_text_bold | boolean | 设置文字是否支持加粗,默认true\n| lv_text_all_caps | boolean | 设置文字是否支持全部大写,默认true\n| lv_background_color | color | 设置背景颜色,默认\"#FF4081\"\n| lv_min_size | dimension | 设置LabelView所在矩形最小宽高,默认mFillTriangle?35dp:50dp\n| lv_padding | dimension | 设置文字上下padding,默认3.5dp,mFillTriangle为true时无效\n| lv_gravity | enum | 设置LabelView方向,支持左上或右上或左下或右下,默认左上\n| lv_fill_triangle | boolean | 设置是否填充三角区域,默认false\n\n===========================================================================================\n\n### Sample 中使用到的第三方框架包括\n\n- _[Gson](https://github.com/google/gson)_\n- _[GreenDao](https://github.com/greenrobot/greenDAO)_\n- _[SmartRefreshLayout](https://github.com/scwang90/SmartRefreshLayout)  # 刷新_\n- _[PinLockView](https://github.com/aritraroy/PinLockView) # 数字密码锁_\n- _[PatternLockView](https://github.com/aritraroy/PatternLockView) # 九宫格密码锁_\n- _[CompactCalendarView](https://github.com/SundeepK/CompactCalendarView) # 日历_\n- _Bugly_\n- _[PictureSelector](https://github.com/LuckSiege/PictureSelector) # 图片选择库_\n- _butterknife_\n- _okhttp+retrofit+rxjava_\n- _[BGABanner-Android](https://github.com/bingoogolapple/BGABanner-Android) # 引导界面滑动导航 + 大于等于1页时无限轮播 + 各种切换动画轮播效果_\n- _等等。。。_\n\n# 更新日志\n\n【0.3.0】\n\n    add MarqueeView\n    add CircleMenu\n    add AnimNumberTextView\n    add ThreeStateSwitch\n    add SwitchIconView\n    add DescProgressView\n    add WavyLineView\n    add CouponView\n    add RippleView\n\n【0.2.2】\n\n    更改刷新为SmartRefresh\n    更改网络加载为okhttp+retrofit+rxjava\n    更改注解为butterknife\n    添加RulerView\n    等\n\n【0.1.9】\n\n    添加StateView\n    添加PictureSelector使用\n    添加Bugly更新使用\n    添加IndexBar，InadexLayout\n    添加NormalDecoration\n    添加Banner的使用\n    添加RoundTextView\n\n【0.1.7】\n\n    添加动画工具类方法\n    完善工具类方法\n    添加RangeSeekBar\n    添加加密算法\n    添加对lanmbda表达式的支持\n    添加SwitchButton\n    配置JitPack.io\n\n【0.1.4】\n\n    完善TimeUtils\n    添加AnimatorUitls方法\n    添加雷达图library\n    添加BaseApplication\n    添加NumberProgressBar\n    添加UpdateAppDialog\n    删除GifMovieView\n    删除HorizontalProgressDialog\n\n【0.1.3】\n\n    添加 Glide 下的 Transformations\n    修改BUG\n\n【0.1.1】\n\n    添加 SearchView\n    添加 GifMovieView\n    添加 ConversionUtils\n    修改 TimeUtils\n    修改包结构\n\n【0.1.0】\n\n    添加 ExpandTextView 可展开、折叠的TextView\n    修改自定义AlertDialog，添加更多属性\n    添加 RecyclerViewBanner 广告轮播\n    添加 SmallBang\n    添加 WaveLoadingView 水波效果\n    添加工具类AnimatorUitls、RandomUtils，完善AppUitls\n\n【0.0.9】\n\n    添加 LoadingView 加载动画\n    更新Android 轻量级适配器，添加TextView一些属性\n\n【0.0.8】\n\n    RecyclerView嵌套RecyclerView；\n    添加 LabelView 角标\n\n【0.0.7】\n\n    StringUtils、TimeUtils、ViewUtils类中添加新的方法；\n    添加 SwipeToLoadLayout 下拉刷新上拉加载\n\n【0.0.6】\n\n    修改ProgressDialog\n\n【0.0.5】\n\n    添加HorizontalProgressDialog；\n    添加StatusBarHelper；\n    去掉枚举并转换成Integer，避免增加app的class.dex文件的大小\n\n【0.0.4】\n\n    添加BottomDialog和NumberAnimTextView\n\n【0.0.3】\n\n    添加完善工具类；\n    添加自定义控件“可翻转的View，仿支付宝-蚂蚁宝卡里流量兑换的翻转View”\n\n【0.0.2】\n\n    添加工具类；\n    ExpandIcon\n\n【0.0.1】\n\n    创建项目，添加了一些工具类\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshichunlei%2Fmylibrary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshichunlei%2Fmylibrary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshichunlei%2Fmylibrary/lists"}