• Stars
    star
    358
  • Rank 116,088 (Top 3 %)
  • Language
    Java
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

自定义弹窗,其中包括:自定义Toast;自定义dialog控件;自定义DialogFragment弹窗;自定义PopupWindow弹窗;还有自定义Snackbar等等;简单便用。目前已经用于多个正式项目中。

自定义对话框

目录介绍

  • 01.该库介绍
  • 02.效果展示
  • 03.如何使用
  • 04.注意要点
  • 05.优化问题
  • 06.版本更新
  • 07.弹窗bug
  • 08.参考案例

01.该库介绍

  • 本库融合了弹窗类型有:Dialog,DialogFragment,Toast,PopupWindow,SnackBar。功能十分齐全,适合应用于实际开发中。
  • 一行代码调用检测手机通知权限,建议加上,大部分手机通知权限是开启的。如果关闭了,则吐司是无法显示的,但是仍有部分手机,比如某型号小米手机,锤子手机等就权限需要手动开启。
  • 针对吐司工具类,轻量级,使用builder模式,链式调用设置属性,可以设置吐司背景,文字内容,或者自定义布局吐司。解决避免点击多次导致吐司多次问题。
  • 针对Dialog弹窗,仿IOS底部弹窗Dialog,可以设置弹窗主题,菜单项单击事件,取消事件监听,可以设置菜单项名称,十分方便。
  • 针对实际开发中,比如请求接口需要加载loading,可以直接使用该库中的ViewLoading,一行代码show或者一行代码dismiss。
  • 封装了SnackBar工具类,链式调用,可以快捷设置内容和action,十分方便开发者使用。

02.如何使用

  • 首先在项目build.gradlew中添加**
    //这个是依赖弹窗所有的
    implementation 'com.github.yangchong211.YCDialog:DialogLib:3.6.8'
    
    //如果你想使用某个lib,可以选择下面这种依赖
    implementation 'com.github.yangchong211.YCDialog:PopupWindow:3.6.8'
    implementation 'com.github.yangchong211.YCDialog:ToastUtils:3.6.8'
    implementation 'com.github.yangchong211.YCDialog:SnackBar:3.6.8'
    implementation 'com.github.yangchong211.YCDialog:DialogFragment:3.6.8'
    implementation 'com.github.yangchong211.YCDialog:BaseDialog:3.6.8'
    

2.1 仿IOS底部弹窗Dialog

  • 支持设置弹窗主题,支持设置取消事件listener,支持设置名称和标题。有多个构造方法可以创建对象……
    private void showCustomDialog() {
        final List<String> names = new ArrayList<>();
        names.add("拍照");
        names.add("相册");
        names.add("其他");
        showDialog(new CustomSelectDialog.SelectDialogListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            }
        }, names);
    }
    private CustomSelectDialog showDialog(CustomSelectDialog.SelectDialogListener listener,
                                            List<String> names) {
        CustomSelectDialog dialog = new CustomSelectDialog(this,
                R.style.transparentFrameWindowStyle, listener, names);
        dialog.setItemColor(R.color.colorAccent,R.color.colorPrimary);
        //判断activity是否finish
        if (!this.isFinishing()) {
            dialog.show();
        }
        return dialog;
    }
    

2.2 自定义Toast工具类

  • 采用builder构造者模式,链式编程,一行代码调用即可设置吐司Toast。注意:为了避免静态toast对象内存泄漏,固可以使用应用级别的上下文context。
  • 支持设置吐司的背景颜色,支持设置自定义吐司,同时支持设置吐司的多种属性等等,具体的用法如下所示:
    //可以自由设置吐司的背景颜色,默认是纯黑色
    ToastUtils.setToastBackColor(this.getResources().getColor(R.color.color_7f000000));
    
    //直接设置最简单吐司,只有吐司内容
    ToastUtils.showRoundRectToast("自定义吐司");
    
    //设置吐司标题和内容
    ToastUtils.showRoundRectToast("吐司一下","潇湘剑雨杨充是个逗比");
    
    //第三种直接设置自定义布局的吐司
    ToastUtils.showRoundRectToast(R.layout.view_layout_toast_delete);
    
    //或者直接采用bulider模式创建
    ToastUtils.Builder builder = new ToastUtils.Builder(this.getApplication());
    builder
            .setDuration(Toast.LENGTH_SHORT)
            .setFill(false)
            .setGravity(Gravity.CENTER)
            .setOffset(0)
            .setDesc("内容内容")
            .setTitle("标题")
            .setTextColor(Color.WHITE)
            .setBackgroundColor(this.getResources().getColor(R.color.blackText))
            .build()
            .show();
    

2.3 自定义简易型PopupWindow

  • 只需要继承BasePopDialog即可,实现其中的两个抽象方法
    //第一步,自定义pop,继承BasePopDialog类,重新抽象方法
    public class CustomPop extends BasePopDialog {
    
        public CustomPop(Context context) {
            super(context);
        }
    
        @Override
        public int getViewResId() {
            return R.layout.view_pop_custom;
        }
    
        @Override
        public void initData(View contentView) {
            TextView tv_pop = (TextView) contentView.findViewById(R.id.tv_pop);
            tv_pop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ToastUtils.showRoundRectToast("滚犊子吧");
                }
            });
        }
    }
    
    //第二步,创建pop并且展示
    CustomPop customPop = new CustomPop(this);
    customPop.setDelayedMsDismiss(2500);
    customPop.setBgAlpha(0.5f);
    customPop.showAsDropDown(tv6, 0, -tv6.getMeasuredHeight() - tv6.getHeight());
    

2.4 自定义PopupWindow,builder模式

  • 如下所示,更加详细的用法的方法说明可以直接看项目demo的代码
    View contentView = LayoutInflater.from(this).inflate(R.layout.pop_layout,null);
    //创建并显示popWindow
    popWindow = new CustomPopupWindow.PopupWindowBuilder(this)
            //.setView(R.layout.pop_layout)
            .setView(contentView)
            .setFocusable(true)
            //弹出popWindow时,背景是否变暗
            .enableBackgroundDark(true)
            //控制亮度
            .setBgDarkAlpha(0.7f)
            .setOutsideTouchable(true)
            .setAnimationStyle(R.style.popWindowStyle)
            .setOnDissmissListener(new PopupWindow.OnDismissListener() {
                @Override
                public void onDismiss() {
                    //对话框销毁时
                }
            })
            .create()
            .showAsDropDown(tv6,0,10);
    

2.5 自定义底部弹窗Dialog,builder模式【使用menu】

  • 代码如下所示
    new CustomBottomDialog(MainActivity.this)
            .title("这个是标题")
            .setCancel(true,"取消选择")
            .orientation(CustomBottomDialog.VERTICAL)
            .inflateMenu(R.menu.menu_share, new OnItemClickListener() {
                @Override
                public void click(CustomItem item) {
    
                }
            })
            .show();
    

2.6 自定义布局弹窗dialogFragment[填充普通布局]

  • 同1.2.7 具体可以先安装一下demo,看一下效果,使用方法如下所示:
    final BottomDialogFragment dialog = new BottomDialogFragment();
    dialog.setFragmentManager(getSupportFragmentManager());
    dialog.setViewListener(new BottomDialogFragment.ViewListener() {
        @Override
        public void bindView(View v) {
            TextView tv_cancel = (TextView) v.findViewById(R.id.tv_cancel);
            tv_cancel.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismissDialogFragment();
                }
            });
        }
    });
    dialog.setLayoutRes(R.layout.dialog_bottom_layout);
    dialog.setDimAmount(0.5f);
    dialog.setTag("BottomDialog");
    dialog.setCancelOutside(true);
    //这个高度可以自己设置,十分灵活
    dialog.setHeight(getScreenHeight() / 2);
    dialog.show();
    

2.7 自定义布局弹窗dialogFragment[填充list布局]

  • 这个是之前沙丘大学底部弹窗而定制的,可以设置自定义布局view或者layout,可以设置tag,设置是否可以cancel弹窗,并且最主要可以设置弹窗的高度。
  • 比较常见,比如下载音乐,下载视频等等,弹窗页面可以滚动,ok,就可以使用这个,代码也不是很复杂,具体使用场景可以参考我的另外一个demo:https://github.com/yangchong211/YCVideoPlayer
    final List<DialogBean> list = new ArrayList<>();
    for(int a=0 ; a<20 ; a++){
        DialogBean dialogBean = new DialogBean("ooo","杨充","title");
        list.add(dialogBean);
    }
    
    BottomDialogFragment.create(getSupportFragmentManager())
        .setViewListener(new BottomDialogFragment.ViewListener() {
            @Override
            public void bindView(View v) {
                RecyclerView recyclerView = (RecyclerView) v.findViewById(R.id.recyclerView);
                ImageView ivCancel = (ImageView) v.findViewById(R.id.iv_cancel);
                ImageView ivDownload = (ImageView) v.findViewById(R.id.iv_download);
    
                recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
                DialogListAdapter mAdapter = new DialogListAdapter(MainActivity.this, list);
                recyclerView.setAdapter(mAdapter);
                final RecycleViewItemLine line = new RecycleViewItemLine(
                        MainActivity.this, LinearLayout.HORIZONTAL, 2,
                        MainActivity.this.getResources().getColor(R.color.grayLine));
                recyclerView.addItemDecoration(line);
                mAdapter.setOnItemClickListener(new DialogListAdapter.OnItemClickListener() {
                    @Override
                    public void onItemClick(int position) {
    
                    }
                });
                View.OnClickListener listener = new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        switch (v.getId()) {
                            case R.id.iv_cancel:
    
                                break;
                            case R.id.iv_download:
                                ToastUtils.showToast("下载");
                                break;
                            default:
                                break;
                        }
                    }
                };
                ivCancel.setOnClickListener(listener);
                ivDownload.setOnClickListener(listener);
            }
        })
        .setLayoutRes(R.layout.dialog_bottom_layout_list)
        .setDimAmount(0.5f)
        .setTag("BottomDialog")
        .setCancelOutside(true)
        .setHeight(getScreenHeight() / 2)
        .show();
    

2.8 自定义常见弹窗,builder模式

  • 非常常见的弹窗,由于原生自带的弹窗不太美观,因此就需要自己定制弹窗呢。可以设置弹窗标题,内容,以及下面取消,确定等按钮内容和颜色
  • 注意,如果某个属性设置为空或者不设置,那么就会隐藏该布局。这个也是根据公司产品具体的业务场景,逐渐演变过来的,具体效果可以直接看项目demo
    CustomDialogFragment
            .create(getSupportFragmentManager())
            .setTitle("这个是是标题")
            .setContent("这个是弹窗的内容")
            .setOtherContent("其他")
            .setDimAmount(0.2f)
            .setTag("dialog")
            .setCancelOutside(true)
            .setCancelListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CustomDialogFragment.dismissDialogFragment();
                    ToastUtils.showRoundRectToast("取消了");
                }
            })
            .setOkListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CustomDialogFragment.dismissDialogFragment();
                    ToastUtils.showRoundRectToast("确定了");
                }
            })
            .setOtherListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    CustomDialogFragment.dismissDialogFragment();
                    ToastUtils.showRoundRectToast("其他内容");
                }
            })
            .show();
    

2.9 自定义loading加载窗

  • 一行代码调用即可,个人感觉不需要太复杂的代码,就能实现这个功能,满足具体业务需求,也是不亦乐乎:
    //开始loading
    ViewLoading.show(this);
    ViewLoading.show(this,"加载中");
    //结束loading
    ViewLoading.dismiss(this);
    

2.10 自定义SnackBar工具类

  • 可以一行代码调用,也可以自己使用链式编程调用。支持设置显示时长属性;可以设置背景色;可以设置文字大小,颜色;可以设置action内容,文字大小,颜色,还有点击事件;可以设置icon;代码如下所示,更多内容可以直接运行demo哦!
    //1.只设置text
    SnackBarUtils.showSnackBar(this,"滚犊子");
    
    //2.设置text,action,和点击事件
    SnackBarUtils.showSnackBar(this, "滚犊子", "ACTION", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ToastUtils.showRoundRectToast("滚犊子啦?");
        }
    });
    
    //3.设置text,action,和点击事件,和icon
    SnackBarUtils.showSnackBar(this, "滚犊子", "ACTION",R.drawable.icon_cancel, new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ToastUtils.showRoundRectToast("滚犊子啦?");
        }
    });
    
    //4.链式调用
    SnackBarUtils.builder()
        .setBackgroundColor(this.getResources().getColor(R.color.color_7f000000))
        .setTextSize(14)
        .setTextColor(this.getResources().getColor(R.color.white))
        .setTextTypefaceStyle(Typeface.BOLD)
        .setText("滚犊子")
        .setMaxLines(4)
        .centerText()
        .setActionText("收到")
        .setActionTextColor(this.getResources().getColor(R.color.color_f25057))
        .setActionTextSize(16)
        .setActionTextTypefaceStyle(Typeface.BOLD)
        .setActionClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtils.showRoundRectToast("滚犊子啦?");
            }
        })
        .setIcon(R.drawable.icon_cancel)
        .setActivity(MainActivity.this)
        .setDuration(SnackBarUtils.DurationType.LENGTH_INDEFINITE)
        .build()
        .show();
    

04.注意要点

05.效果展示

image image image image image image image image image image image image

05.优化问题

关于弹窗系列博客
  • 02.Toast源码深度分析
    • 最简单的创建,简单改造避免重复创建,show()方法源码分析,scheduleTimeoutLocked吐司如何自动销毁的,TN类中的消息机制是如何执行的,普通应用的Toast显示数量是有限制的,用代码解释为何Activity销毁后Toast仍会显示,Toast偶尔报错Unable to add window是如何产生的,Toast运行在子线程问题,Toast如何添加系统窗口的权限等等
  • 03.DialogFragment源码分析
    • 最简单的使用方法,onCreate(@Nullable Bundle savedInstanceState)源码分析,重点分析弹窗展示和销毁源码,使用中show()方法遇到的IllegalStateException分析
  • 04.Dialog源码分析
    • AlertDialog源码分析,通过AlertDialog.Builder对象设置属性,Dialog生命周期,Dialog中show方法展示弹窗分析,Dialog的dismiss销毁弹窗,Dialog弹窗问题分析等等
  • 05.PopupWindow源码分析
    • 显示PopupWindow,注意问题宽和高属性,showAsDropDown()源码,dismiss()源码分析,PopupWindow和Dialog有什么区别?为何弹窗点击一下就dismiss呢?
  • 06.Snackbar源码分析
    • 最简单的创建,Snackbar的make方法源码分析,Snackbar的show显示与点击消失源码分析,显示和隐藏中动画源码分析,Snackbar的设计思路,为什么Snackbar总是显示在最下面
  • 07.弹窗常见问题
    • DialogFragment使用中show()方法遇到的IllegalStateException,什么常见产生的?Toast偶尔报错Unable to add window,Toast运行在子线程导致崩溃如何解决?
  • 08.Builder模式
    • 你会发现,在这个弹窗封装库中,很多地方用到了builder模式,那么可以先了解下Builder模式使用场景,简单案例,Builder模式实际案例Demo展示,看看AlertDialog.Builder源代码如何实现,为什么AlertDialog要使用builder模式呢?builder模式优缺点分析。

06.版本更新

  • v1.0 更新2016年6月2日
  • v1.4 更新2017年8月9日
  • v3.3 更新2018年1月12日
  • v3.4 更新2018年1月18日
  • v3.5 更新2018年1月31日
  • v3.5.1 更新与2018年6月2日
  • v3.5.3 更新于2018年9月10日
  • v3.6.5 更新于2018年9月15日
  • v3.6.6 更新于2019年5月7日

07.弹窗bug

  • 1.DialogFragment使用中show()方法遇到的IllegalStateException
  • 2.Toast偶尔报错Unable to add window,is your activity running
  • 3.Toast运行在子线程导致崩溃,子线程如何吐司
  • 4.Dialog Unable to add window --token null is not for an application
  • 5.为什么Dialog不能用Application的Context,一旦用了则会导致崩溃

其他介绍

01.关于博客汇总链接

02.关于我的博客

More Repositories

1

YCBlogs

技术博客笔记大汇总,包括Java基础,线程,并发,数据结构;Android技术博客等等;常用设计模式;常见的算法;网络协议知识点;部分flutter笔记;还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!转载请注明出处,谢谢!
6,368
star
2

YCAppTool

组件化综合案例,组件分层为:基础公共组件,功能组件,业务组件,主工程。每一层组件的建设,很详细的工程案例,很全面的一个组件化实践案例。一个超级综合案例!
Java
3,157
star
3

YCVideoPlayer

基础封装视频播放器player,可以在ExoPlayer、MediaPlayer原生MediaPlayer可以自由切换内核;该播放器整体架构:播放器内核(自由切换) + 视频播放器 + 边播边缓存 + 高度定制播放器UI视图层。支持视频简单播放,列表播放,仿抖音滑动播放,自动切换播放,使用案例丰富,拓展性强。
Java
2,162
star
4

YCWebView

基于腾讯x5开源库,提高webView开发效率,大概要节约你百分之六十的时间成本。该案例支持处理js的交互逻辑且无耦合、同时暴露进度条加载进度、可以监听异常error状态、支持视频播放并且可以全频、支持加载word,xls,ppt,pdf,txt等文件文档、发短信、打电话、发邮件、打开文件操作上传图片、唤起原生App、支持webView页面截图、x5库为最新版本,功能强大。
Java
1,725
star
5

YCAndroidTool

用于项目测试,崩溃重启操作,崩溃记录日志【可以查看,分享】和重启【多种重启app方式】;网路拦截查看的工具小助手,拦截请求和响应数据,统计接口请求次数,流量消耗,以及统计网络链接/dns解析/request请求/respond响应等时间。提高开发效率……
Java
739
star
6

YCStateLayout

State switching, so that the View state switch and Activity completely separate. Using builder mode to freely add the required state View, can set data, data is empty, load data error, network error, load and other states, and support the layout of custom state. At present has been used in other formal projects, strong expansion!
Java
558
star
7

YCSlideLayout

购物商场商品详情页面自定义控件,模仿淘宝、京东、考拉等商品详情页分页加载的UI效果。可以嵌套RecyclerView、WebView、ViewPager、ScrollView等等。支持设置上拉分页加载动画效果……
Java
490
star
8

YCCustomText

自定义文本控件,支持富文本,包含两种状态:编辑状态和预览状态。编辑状态中,可以对插入本地或者网络图片,可以同时插入多张有序图片和删除图片,支持图文混排,并且可以对文字内容简单操作加粗字体,设置字体下划线,支持设置文字超链接(超链接支持跳转),已经用于多个实际项目中……
Java
478
star
9

YCRefreshView

自定义支持上拉加载更多,下拉刷新,可以自定义头部和底部,可以添加多个headerView,使用一个原生recyclerView就可以搞定复杂界面。支持自由切换状态【加载中,加载成功,加载失败,没网络等状态】的控件,可以自定义状态视图View。拓展功能【支持长按拖拽,侧滑删除】,轻量级,可以选择性添加 。多年前已经使用于前项目投资界,新芽,沙丘大学等APP正式项目中!持续更新……
Java
454
star
10

YCUpdateApp

轻量级版本更新弹窗,弹窗上支持更新进度条,可以设置普通更新或者强制更新。解决8.0以上通知栏不显示问题,解决7.0以上安装apk异常,下载完成则会自动提示安装;下载异常,失败,错误等状态,支持重启下载任务;还支持自定义下载路径。代码量少,调用简单……
Java
447
star
11

YCCaptureTool

App综合防抓包实践,关闭代理,设置配置文件;设置单向认证或双向认证;对数据加密和解密;sign签名参数;防止xposed,root,va挂载等操作。 比较通用全面的防抓包技术方案!
Java
417
star
12

YCNotification

通知栏封装库,强大的通知栏工具类,链式编程调用,解决了8.0以上通知栏不显示问题,支持多种不同的使用场景,兼容老版本。还有自定义通知栏view,可高度定制布局……
Java
375
star
13

YCScrollPager

仿抖音,快手,短视频,竖直方向,一次滚动一个页面的封装库。目前支持ViewPager做法,也支持RecyclerView做法……使用ViewPager则只是修改滑动速率,以及滚动翻页过渡时间;使用recyclerView打造丝滑切换视频的功能,更多内容可以看demo
Java
373
star
14

YCAudioPlayer

音频播放器,基础播放功能有:播放,暂停,下一首,上一首;可以设置多种播放类型:顺序播放,随机播放,单曲循环;可以设置播放进度快慢,参考混沌大学APP;支持后台播放,可以扫描本地音频,有效处理了捕获/丢弃音频焦点逻辑,支持耳机线控。通知栏,底部音频播放控制栏,音频List页面和播放详情页数据同步。持续更新中……
Java
347
star
15

YCStatusBar

关于状态栏方案总结案例,适合于绝大多数的使用场景……同时,兼容了小米,魅族等手机状态栏字体颜色设置失效问题。已经用于实际项目投资界,新芽,沙丘大学等APP,一键集成并使用!支持单Activity多Fragment动态修改状态栏颜色,入侵性低,一行代码即可实现你需要的需求
Java
312
star
16

YCJniHelper

JNI学习案例,通过简单的案例快速入门jni开发。JNI基础语法介绍,so库生成打包和反编译,Java和C/C++相关调用案例
Java
263
star
17

YCFlutterUtils

Flutter Utils 全网最齐全的工具类。包含bus,颜色,日期,文件,json,log,sp,加解密,num,图片,网络,正则,验证,路由,文本,时间,spi,计时器,拓展类,编解码,发射,异常,字节转化,解析等等工具类。
Dart
240
star
18

YCThreadPool

轻量级简易线程池库,轻量级线程池异步库,支持线程执行过程中状态回调监测(包含成功,失败,异常等多种状态);支持创建异步任务,可以设置线程的名称,延迟执行时间,线程优先级,回调callback等;可以根据自己需要创建自己需要的线程池;线程异常时,可以打印异常日志,避免崩溃。
Java
224
star
19

YCCommonLib

组件化开发中基础公共库,activity栈管理;fragment周期监听;Lru缓存库;反射库;分区存储;Log日志打印和存储;通用缓存库(支持sp,mmkv,lru,disk,fastsp等多种存储方式切换);App重启;通用全面的工具类Utils;通用基类fragment,adpater,activity等简单封装;intent内容打印到控制台库;通用基础接口
Java
190
star
20

YCWidgetLib

自定义控件,其中包含自定义折叠布局,拓展性强使用简单;万能自定义红点控件,充分解耦合接入方便;多种方案实现阴影效果库;自定义view和viewGroup圆角控件,彻底解决圆角问题等
Java
184
star
21

YCWalleHelper

瓦力多渠道打包的Python脚本测试工具,通过该自动化脚本,自需要run一下或者命令行运行脚本即可实现美团瓦力多渠道打包,打包速度很快。配置信息十分简单,代码中已经注释十分详细。可以自定义输出文件路径,可以修改多渠道配置信息,简单实用。
Tcl
133
star
22

YCBannerView

轮播图,支持多种自定义属性,可以设置轮播红点或者轮播数字,支持设置引导页。可以根据不同使用场景,可以选择无限循环,静态管理或者动态管理adapter,还可以设置暂停和开始轮播。后期添加了RecyclerView轮播图,同时自定义多种类型SnapHelper,卡片滑动流畅,目前已经用于多个正式项目中!!
Java
106
star
23

YCModelBus

组件之间的通信,很友好起到隔离效果,接口+实现类,使用注解生成代码方式,无需手动注册,将使用步骤简单化,支持组件间以暴露接口提供服务的方式进行通信。
Java
77
star
24

YCHybridFlutter

Android和flutter混合开发案例
Dart
71
star
25

YCToolLib

通用工具库组件,包括前后台判断,拦截器时间,心跳轮询库,Task任务库,二维码扫码库,转场动画库,通用TTS音频播放库,国际化locale库等等
Java
60
star
26

YCStudyC

系统性学习C/C++编程语音,记录的Demo案例和学习笔记
C++
48
star
27

YCServerLib

gRPC学习案例,使用gRPC作为网络方案可以带来高效性、跨平台和语言、可靠性、易于使用和可扩展性等收益。同时可以减少手动编写代码的工作量,提高开发效率。
Java
48
star
28

YCDesignHelper

注解学习小案例,比较系统性学习注解并且应用实践。简单应用了运行期注解,通过注解实现了setContentView功能;简单应用了编译器注解,通过注解实现了防暴力点击的功能,同时支持设置时间间隔;使用注解替代枚举;使用注解一步步搭建简单路由案例。结合相应的博客,在来一些小案例,从此应该对注解有更加深入的理解……
Java
45
star
29

YCArchitecture

MVC,MVP,MVVM框架案例实践,Jetpack,Compose等学习演进。不同架构案例demo对比……
Java
44
star
30

YCTimerHelper

倒计时工具,分别使用了handler,自定义CountDownTimer,Timer和TimerTask,chronometer控件,和属性动画实现倒计时的功能。封装CountDownTimer倒计时器【在原有基础上增加了暂停和恢复倒计时功能】,解决了倒计时无法到0和从最大值开始bug
Java
13
star
31

YCVaHelpTool

VA学习案例,研究挂载,逆向,安全这一块
Java
5
star
32

YCSplashSdk

打开app启动页sdk,支持图片广告,也支持视频
3
star
33

YCUniApp

uni开发的项目,由于公司项目做混合开发,因此边学边做。基础入门级的案例分析,近期学习更新中
Vue
3
star
34

YCPluginTool

Plugin插件学习工具
2
star
35

yangchong211

1
star