自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 资源 (43)
  • 收藏
  • 关注

原创 Netty框架的简单使用,实现socket通讯

个人博客:haichenyi.com。感谢关注  题外话,很多人都把JDK1.4提供的NIO称之为异步非阻塞I/O;其实,并不然,从严格意义上面讲,它只能称为非阻塞I/O。在JDK1.7提供的NIO 2.0,新增了异步的套接字通道Channel,它才是真正的异步非阻塞I/O。下表是不同I/O模型的对比:表1-1 几种I/O模型和同能对比 同步阻塞I/O(BIO) 伪异步I/...

2018-02-12 11:15:43 17566 1

原创 Android存储之SharedPreferences源码解析

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–简介3–getSharedPreferences会不会阻塞线程,为什么?4–get操作,为什么有时候会卡顿?5–commit和apply的区别6–优化sp操作2.简介  从工作开始,Android存储数据最常见的应该就是SharePreference,但是,你真的用懂了吗?源码你看过吗?Google对sp的定位你知道吗?是不是所有数据都应该用sp来存储呢?  为什么现在面试关于sp非常常见呢?不就是一个get,p

2022-01-27 18:23:22 2540

原创 Android——MVVM之DataBinding(一)

DataBinding的view绑定流程图

2021-12-17 23:25:01 2560 1

原创 Android——MVVM之ViewModel

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–前言(MVVM演变路程)3–目的4–ViewModel为什么不会内存泄漏?5–Activity屏幕旋,为什么ViewModel没有被重新创建还是使用的是之前的?6–Activity与Fragment之间数据如何共享的7–GlobeScope,viewModelScope,lifecycleScope的相关问题前言(MVVM演变路程)  以前有说过MVC,MVP,MVVM之间的区别,这里就不再说了。  MVC架构

2021-11-28 21:58:46 1260

原创 Android——深入理解handler机制

handler原理解析,非常详细

2021-11-21 11:31:34 2450

原创 JAVA—TCP,UDP

个人博客:haichenyi.com。感谢关注1. 目录1–目录2–概念3–优缺点4–三次握手5–四次握手6–通信流程2. 概念  首先,需要确定的就是他们是socket通信的两种协议。  TCP:一种面向连接,全双工可靠信道的传输层协议  UDP:一种无连接的,不可靠的传输层协议3. 优缺点类型安全有序速度对象个数开销方式TCP安全有序慢1:1大面向字节流UDP不安全无序快1:1,1:N,N:N,N:1小面向报

2021-08-09 22:28:12 139

原创 Java并发——公平锁,非公平锁,悲观锁,乐观锁,死锁

个人博客:haichenyi.com。感谢关注前言  这几个锁都可以从前面一篇线程同步器AQS里面找到影子,我先把前面一篇的加锁流程图拿过来用一用。  上面这个流程图是上一篇最开始讲的时候的一张流程图,后面写的时候,后面的流程图都没有画。这一片我们来画一下后面的流程图。公平锁,非公平锁  前面一篇讲的时候,我说过了,我们当时做的是一个公平锁。这个公平锁和非公平锁的主要区别就是在这个队列。  我们前文讲过了,线程1拿到了锁,线程2,3,4就全部放进队列中等待,那么,流程图如下:  如上图,我

2021-07-27 22:06:58 817 2

原创 JAVA并发——线程同步器AQS

个人博客:haichenyi.com。感谢关注前言  每一项技术的提出都是为了解决某一个问题,带着问题来理解技术,使得印象你对这个技术的理解印象更加深刻。并发  举个栗子:现在有一个需求,网络请求分两批(A,B两个批次),A批次并行请求,B批次串行请求按顺序一个一个请求,有一个总超时时间,B批次每一次请求都有一个超时时间,A批次并发请求先请求,在规定时间内没有返回,再开始请求B批次,谁先返回用谁的。  这个是我们项目里面简化过后的一个逻辑,实际逻辑,比这个还要复杂。怎么实现这个功能呢?  带着这

2021-07-19 22:38:09 286

原创 Android模拟点击

个人博客:haichenyi.com。感谢关注  本篇介绍实现模拟点击的两种方式:performClick();MotionEvent事件  举个栗子:我们现在需要实现点击A按钮,触发B按钮点击事件的效果:两个按钮在布局里面随便创建就好了。  第一种方式就是:调用performClick事件 Button btn1 = findViewById(R.id.btn1); final Button btn2 = findViewById(R.id.btn2);

2021-07-07 21:23:56 1140 2

原创 SpringBoot系列—消息(RabbitMQ)(二十)

个人博客:haichenyi.com。感谢关注  大多数应用当中,可通过消息服务中间件来提升系统的异步通信和扩展解耦能力。简介消息服务中两个重要的概念  消息代理和目的地:当消息发送者发送消息之后,将由消息代理接管,消息代理保证消息发送到指定的目的地。消息发送的两种方式:队列(Queue):点对点消息通信(point-to-point)主题(Topic):发布(publish)/订...

2019-11-27 14:43:37 204

原创 SpringBoot系列—Docker(十九)

个人博客:haichenyi.com。感谢关注简介  Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。  容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。  我们spring ...

2019-11-13 14:43:59 154

原创 SpringBoot系列—Run启动原理(十八)

个人博客:haichenyi.com。感谢关注  需要搞清楚几个重要的事件回调机制配置在META-INF/spring.factoriesApplicationContextInitializerSpringApplicationRunListener只需要放在ioc容器中ApplicationRunnerCommandLineRunner  新建一个空项目,就勾选...

2019-11-11 17:27:20 295

原创 SpringBoot系列—Redis(十七)

个人博客:haichenyi.com。感谢关注  前面一篇说到了spring boot自带的缓存SimpleCache,我们也聊到了他的底层实际上就是HashMap,并且这个缓存是放在内存当中的,这样弊端也是有的,比如:内存大小,当服务器关闭之后,缓存就没了等等。简介  实际开发中,一般使用缓存中间件:Redis,EHCache,MemCache等等,今天,我们就来聊聊,经常听到的——Red...

2019-11-06 16:39:47 187

原创 SpringBoot系列—缓存及其源码分析(十六)

个人博客:haichenyi.com。感谢关注  缓存是每个项目都用到的为了提高接口响应效率,降低数据库的查询压力,从而提高系统性能。所以,缓存对于一个项目来说是至关重要的。简介  spring 3+之后,就定义了CacheManager和Cache接口来统一不同的缓存技术。CacheManager:缓存管理器,用于管理各种Cache缓存组件Cahce:定义了各种操作,Spring在C...

2019-11-05 10:51:42 256

原创 SpringBoot系列—邮件(十五)

个人博客:haichenyi.com。感谢关注  邮件发送是必不可少的,不管是注册邮件,还是广告。  spring boot中已经集成的mail的启动器,所以,我们只用配置好就行了。  引入启动器: <dependency> <groupId>org.springframework.boot</groupId> &l...

2019-10-31 17:09:32 242

原创 SpringBoot系列—异步任务与定时任务(十四)

个人博客:haichenyi.com。感谢关注异步任务  什么时候用异步,就是耗时操作的时候就可以用到异步,比如:批量处理数据,批量发邮件等等。  用法与前面的事务管理类似,spring 3+之后,就已经内置了 @Async 来处理异步任务。我们使用两个注解即可。@EnableAysnc 启动类上开启基于注解的异步任务@Aysnc 标识的方法会异步执行如:@EnableAsync...

2019-10-31 14:31:13 204

原创 SpringBoot系列—事务管理(十三)

个人博客:haichenyi.com。感谢关注  我们操作数据库,事务管理是必不可少的一部分。什么是事务  我们在开发企业应用时,用户的一个操作对应数据库可能是多步操作相结合完成的。在这个多个步骤中,其中的一步,可能出现异常,导致后面的步骤无法向下进行,那么,用户的这个操作,可能就没有进行完,前面已经进行的步骤数据就需要回退。举个总所周知的栗子:  银行的转账,A给B转账,转1000块钱...

2019-09-17 13:36:34 137

原创 SpringBoot系列—Spring Data JPA(十二)

个人博客:haichenyi.com。感谢关注什么是 Spring Data  Spring Data 是 Spring Boot 底层默认进行数据访问的技术 , 为了简化构建基于 Spring 框架应用的数据访问技术,包括非关系数据库、Map-Reduce 框架、云数据服务等;另外也包含对关系数据库的访问支持。  Spring Data 包含多个模块:Spring Data Comm...

2019-09-11 17:02:16 172

原创 SpringBoot系列—MyBatis(十一)

个人博客:haichenyi.com。感谢关注  上一篇,Druid是用于处理数据库连接池与后台监控。  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordina...

2019-09-07 18:55:33 123

原创 SpringBoot系列—Druid(十)

个人博客:haichenyi.com。感谢关注  一个企业项目中最重要的部分那就是数据库了,对数据库的连接,读写是重中之重。在SpringBoot中数据库怎么连接呢?数据库的连接  这里以MySql为例,还不会用MySql数据库的童鞋,可以看我之前的博客,数据库相关。   第一步, 我们首先在pom.xml中添加jdbc相关的启动器。 <!--jdbc启动器--&gt...

2019-09-05 16:03:58 6375 1

原创 SpringBoot系列—自定义拦截器(九)

个人博客:haichenyi.com。感谢关注  拦截器拦截请求做额外的处理。举个栗子:登录拦截器,拦截所有的请求,必须登录之后才能访问。package com.haichenyi.springbootbill.interceptors;import org.springframework.web.servlet.HandlerInterceptor;import javax.ser...

2019-09-03 09:23:16 159

原创 SpringBoot系列—国际化(八)

个人博客:haichenyi.com。感谢关注  所谓的国际化就是语言切换。中文切换到其他语种。  国际化的信息,这些都是需要开发人员在配置类中配置好的。SpringBoot会自动加载这些配置类。举个栗子:以登录界面为例,我们的登录界面输入账号、密码框的左边,会有这两个提示,我们就自动修改这两个提示。创建配置文件  首先,你要在你的resources目录下面新建i18n目录,当然,不是必...

2019-09-02 16:13:15 108

原创 SpringBoot系列—热部署与SpringMVC扩展功能(七)

个人博客:haichenyi.com。感谢关注热部署  默认情况下,在开发中我们修改一个项目文件后,想看到效果不得不重启应用,这会导致浪费大量时间,我们希望不重启应用的情况下,程序可以自动部署(热部署)。  第一步:禁用缓存#开发环境下关闭thymeleaf模板缓存,thymeleaf默认是开启状态。记得发布的时候要打开spring.thymeleaf.cache=false  第二...

2019-08-30 10:42:33 153

原创 SpringBoot系列—Thymeleaf常用属性(六)

个人博客:haichenyi.com。感谢关注引用公共片段 th:fragment,th:replace,th:insert  很多页面有很多相同的内容,比方说header和foot,这样的内容就需要公共片段引用了,修改一个地方就全部都改了。类似于android里面提取公共方法一样的道理。方式如下图:<!DOCTYPE html><html lang="en" xm...

2019-08-29 11:07:04 646

原创 SpringBoot系列—Thymeleaf(五)

个人博客:haichenyi.com。感谢关注  SpringBoot官方不推荐使用JSP,因为内嵌Tomcat,Jetty容器不支持以jar的方式运行JSP。SpringBoot中提供了大量模板引擎,包含Freemarker,Mastache,Thymeleaf等。而SpringBoot官方推荐使用Thymeleaf作为模板引擎,因为Thymeleaf提供了完美的SpringMVC的支持。添...

2019-08-27 11:22:50 120

原创 SpringBoot系列—全局配置(四)

个人博客:haichenyi.com。感谢关注  用IDEA可以直接创建SpringBoot项目,创建Moudle的时候,在选Maven的地方,选择Sping Initializr即可,很简单。前面讲过了IDEA生成Maven项目,并且嵌入SpringBoot,直接创建Spring Boot项目就是IDEA直接帮我们依赖,并且生成Application和properties文件。其它,也没啥大的...

2019-08-23 10:25:25 873

原创 SpringBoot系列—@SpringBootApplication源码解析(三)

个人博客:haichenyi.com。感谢关注  上一篇,内容很少,说了一下SpringBoot的底层是怎么依赖的。这一篇讲一下SpringBoot底层源码是怎么实现的。  从SpringBoot的入口开始。第一篇的时候说过了,最好把入口文件放在最外层的包下面,至于原因就不多阐述了。  说说这个 @SpringBootApplication注解的原理,点进去看一下:如下图:主要就是这三...

2019-08-22 16:19:51 180

原创 SpringBoot系列—底层依赖(二)

个人博客:haichenyi.com。感谢关注  前面,我们创建了一个Spring Boot的hello world,我们仅仅添加了一个spring-boot-starter-parent,它是怎么帮我们实现这个依赖的呢?我们可以点进去看一下Ctrl+鼠标左键,如下图:  我们发现它,还有一个父级依赖spring-boot-dependencies,我们继续点进去看,如下图:  在这个...

2019-08-22 14:56:16 208

原创 SpringBoot系列—Hello World(一)

个人博客:haichenyi.com。感谢关注  终于要正式开始了java后台之路,虽然,之前断断续续的看过过黑马的java web视频,但是,都是好几年前的视频,很老了,感觉用处比较大的就是MySQL数据库操作,之前也写过几篇关于MySQL数据库操作的博客。目前,java后台最火的框架就属Spring Boot了。它是spring家族的衍生框架,并不是加强某个功能,它是为了简化配置,提高开发效...

2019-08-22 13:57:32 158

原创 dagger2整个流程解析(一)

个人博客:haichenyi.com。感谢关注  众所周知,dagger的入门是比较难的,在嵌入之前,我先说一下这个dagger必要的东西,也是比较常见的东西,几个注解 @Component,@Singleton,@Module,@Provides,@Inject  大致的整个流程如下:编译的时候,先找构造方法由@Inject标记的类,生成对应的Factory.class类,这个类里面通过...

2019-07-31 20:16:56 147

原创 一场由dagger2引发的一些思考

个人博客:haichenyi.com。感谢关注  用了好几年的dagger2,从dagger2.android。就只有当时刚开始用dagger的时候深入的了解过,后来就再也没有深入的时候研究过。这几天又研究了一下,做个总结。  就拿之前写的kotlin的框架来说,它用的是dagger2.android。从dagger2.android。最明显的就是,需要我们自己写的东西越来越少了,框架帮我们做...

2019-07-31 17:39:06 303

原创 Tomcat安装与启动

个人博客:haichenyi.com。感谢关注  搭建android框架的时候总是会遇到测试网络请求没有接口的问题,今天就自己搭建一个服务器Tomcat。不用写web项目就能直接获取到数据  一.Tomcat主页跳转下载  二.Download——版本(点击)——Binary Distributions——Core——zip(点击),该版本是解压版,解压就可以用,无需安装。如下图  三...

2019-07-25 20:21:34 137

原创 Android开发中的小技巧(持续更新...)

个人博客:haichenyi.com。感谢关注1. 不需要读写权限就可以操作的目录  一谈起要做文件的读写操作,应在脑海中的就是先申请读写权限,没有读写权限就不让对应的操作。那为什么SP也是把数据存本地,缺不需要读写权限呢?  只要是存储在你的APP目录下面,就不需要读写权限。而,手机上面APP目录有两种:一种是手机内部,一种是SD卡目录。怎么获取呢?//手机内部:APP目录下默认有两个文...

2019-07-25 17:55:44 314

原创 kotlin项目框架

个人博客:haichenyi.com。感谢关注MVP+dagger2.android+LiveData+RxJava2+Retrofit2+OkHttpgithub项目链接

2019-07-23 17:31:37 226

原创 kotlin之协程一简单使用

个人博客:haichenyi.com。感谢关注  kotlin协程用于线程切换,kotlin里面不需要new Thread,并且,协程的开销小于new Thread。有三种写法:runBlocking,launch,async既然协程的出现可以取代Thread,我们这里想要验证的是:会不会阻塞主线程?协程里面的代码是怎么执行的?按顺序执行还是并行?协程里面能不能更新页面?依赖  ...

2019-07-18 14:39:32 502

原创 kotlin之内部类,匿名内部类与伴生对象

个人博客:haichenyi.com。感谢关注内部类  kotlin的内部类与java的内部类有点不同***java的内部类可以直接访问外部类的成员,kotlin的内部类不能直接访问外部类的成员,必须用inner标记之后才能访问外部类的成员***class AAA{ var a = 0 class BBB{ //此时,BBB类的内部是不能直接用a变量的 ...

2019-06-14 14:18:48 1551

原创 kotlin之扩展方法

个人博客:haichenyi.com。感谢关注  kotlin的扩展方法类似于java工具类,但是又优于java的工具类。扩展方法  扩展方法的写法,新建一个File类型的kt文件,不是Class类型,不是Interface类型,不是枚举类型,不是Object类型,就是File类型  然后直接定义方法,跟kotlin定义方法相同,需要什么方法就定义什么方法,唯一的区别就是在方法名的前面可以...

2019-06-13 17:51:42 504

原创 kotlin之构造函数(constructor)

个人博客:haichenyi.com。感谢关注  java中的构造函数是与类名相同即可,kotlin里面的构造函数是用constructor关键字表示。  kotlin里面的构造函数分为主构造函数和次构造函数。主构造函数只能有一个,次构造函数个数不限制,可以有一个或者多个constructor  啥是主构造方法?啥是次构造方法呢?//主构造方法如下,跟在类名后面class Person...

2019-06-12 15:53:06 6086 1

原创 kotlin之扩展函数let,run,also,apply

个人博客:haichenyi.com。感谢关注举个例子open class Person { var name: String = "" var age: Int = 0 var address: String = "" override fun toString(): String { return "Person($name)" }...

2019-06-11 15:11:52 380

原创 kotlin之基础

个人博客:haichenyi.com。感谢关注  自从18年上一家公司用kotlin做了项目之后,新公司就没有用过kotlin了,都快要忘完了,最近又想起来了,再捡了一下吧。定义变量的方式  java:类型+变量名+值+逗号int a = 5;  kotlin:var/val+变量名+(:类型)+值(ps:类型可省略)  var:可变变量(可以重新分配值)  val:只读变量(初始...

2019-06-11 13:40:37 311

ViewAnimationUtils

揭露动画5.0特效

2017-08-06

涟漪效果—Ripple

水波纹特效,涟漪效果。简单的一行设置背景即可

2017-08-05

自定义对话框

自定义对话框,传你自己的对话框布局即可

2017-08-03

防止手机获取相片空指针的工具类

防止小米手机相册获取照片空指针的工具类,直接使用

2017-08-03

热门头条的实现

ViewFlipper和MarqueeView

2017-06-01

Tablayout+viewpager+fragment

Tablayout+viewpager+fragment

2017-05-26

自定义view点击事件的接口回调

自定义view点击事件的接口回调

2017-05-01

接口的使用—对okgo进行简单的再封装

接口的使用—对okgo进行简单的再封装

2017-05-01

recyclerView实现时光轴效果

通过recyclerView实现时光轴

2017-04-30

toolbar实现沉浸式状态栏

toolbar实现沉浸式状态栏,可以动态设置是否需要沉浸式状态栏

2017-04-30

BufferTextInputLayout的简单用法

BufferTextInputLayout这个库你可以很多情况都能派上用场,例如用户资料页,用来做密码或用户名的输入长度控制再适合不过,只需简单地指定字数和字数显示的增减性。

2017-03-28

BaseRecyclerViewAdapterHelper3

加入刷新加载功能

2017-03-28

BaseRecyclerViewAdapterHelper(二)

接着前一个,新加了点击,长按事件的用法,一行代码添加动画等

2017-03-28

BaseRecyclerViewAdapterHelper

BaseRecyclerViewAdapterHelper的基本使用

2017-03-27

无限循环滚动图banner

Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

2017-03-23

EventBus入门

EventBus的入门与进阶

2017-03-19

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架

基于SystemBarTint、BottomNavigationBar实现的一个简单的项目框架,有基类,为了让初学者有一个建立框架复用代码的理念。

2017-03-18

RecyclerView简单用法

RecyclerView的基本使用,简单的adapter的设置。

2016-04-18

自定义抽屉—QQ特效

自定义View,实现抽屉效果。并且,实现平滑移动的动画效果。

2016-04-15

fragment实时加载

实现fragment延迟加载,ViewPager+fragment延迟加载。

2016-03-31

MyApplication.rar

关于Android的Tensorflow-Lite简单的机器学习demo,把原图片,转换成目标图片,涉及到图片的ARGB和bitmap之间的相互转换。

2019-05-24

MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp

使用MVP+Dagger.Android+LiveData+RxJava2.0+Retrofit2.0+OkHttp搭建的项目框架

2018-12-10

Dagger.Android+LiveData搭的简单的项目框架

改善了dagger2的嵌入方式,运用dagger.android大大简化了嵌入的代码,新增LiveData框架,使得MVP架构变得简洁,明了。

2018-12-04

一像素保活机制

进程保活,简单的一像素保活机制与前台保活服务双重保证。

2018-07-18

线程管理工具类

用于线程管理的工具类,双重检索获取单例对象,建造者模式设置参数,用法简单ThreadManager.getDefault().execute()

2018-05-15

MyMqttDemo

MQTT推送的demo,里面注释很清楚,如果还是不会,请移步的博客,我的博客里面的介绍也很清楚。

2018-05-11

任意背景的水波纹

可以使用任意背景的圆形水波纹进度自定义View。已经全部封装好。

2018-03-28

贝塞尔曲线水波纹

二阶贝塞尔曲线实现水波纹效果,值得一看,代码写的很清楚

2018-03-27

MyTakePhoto

开源框架TakePhoto的demo,支持图片压缩,相机,相册,多选

2018-03-06

MyProject8

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket+android 6.0 动态权限+android 7.0文件安全问题

2018-03-01

MyProject6

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查+socket

2018-02-26

MyProject5

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的曾删改查

2018-02-24

MyProject4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyApplication4

kotlin项目mvp+dagger+rxjava+retrofit+okhttp+greendao的创建

2018-02-24

MyProject3

android主流的项目框架MVP+dagger+rxjava+retrofit+okhttp,项目拷贝过去可以直接使用

2018-02-23

MyProject2

在前一个项目的基础上增加了mvp+dagger2.0,P层是通过泛型传递了

2018-02-23

MyProject1

android入门的简单的框架,application,baseactivity,basefragment懒加载等等

2018-02-23

CoordinatorLayout的常见用法4种

CoordinatorLayout的常见用法4种: 1.CoordinatorLayout+Snackbar+FAB 2.CoordinatorLayout+AppBarLayout+Toolbar 3.CoordinatorLayout+AppBarLayout+TabLayout 4.CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar+TabLayout

2017-09-06

activity跳转动画

Activity间的跳转动画—Transition。Explode 从中心移入或移出 Slide 从边缘移入或移出 Fade 调整透明度产生渐变

2017-08-06

饿了么搜索特效

高仿饿了么跳转搜索页面特效

2017-08-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除