- 博客(103)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 自定义实现带阴影进度的ImageView
效果图:原理:1.继承自ImageView,将ImageView分为8个区域,8个节点。2.按照100的总进度,除以8,每个区域分配12.5个进度(区域1为0-12.5,区域2为12.5-25,区域3为25-37.5,以此类推),取每个区域的px除以12.5获得每1个进度需要在x轴方向或y方向移动的px值(取名为perX和perY)。3.给每个节点设置权限值(按100/8分配,节点1为12.5,节点2为25,节点3为37.5,以此类推,到节点8为100)。4.通过设置的进度,计算出进度落点坐标
2021-03-24 13:59:49
283
原创 Java中的异构容器
需要提前知道的知识:Class类:Class类是Java机制中的一个特殊类,我们可以通过它获取其他类的属性类型、名称、方法、基类等等信息。为什么可以通过它去获取其他类的信息呢?因为Java中设定了每个类都有这么一个Class类对象,是JVM为我们创建好的,其中一种常见的获取方式就是通过某个类的对象的.getClass()方法获取,获得某个类的Class对象后,我们就可以通过Class类提供的一些方法去读取这个类的信息了,提供的方法比如getFields()、getMethods()等方法。其他获
2020-09-18 02:29:24
491
原创 罗列一些编写泛型时的建议或优化点
使用原生态类型会在运行时导致异常,因此不要使用。原生态类型只是为了与引入泛型之前的遗留代码进行兼容和互用而提供的。非受检警告很重要,不要忽略它们。每一条警告都表示可能在运行时抛出 ClassCastException 异常。 要尽最大的努力消除这些警告。如果无法消除非受检警告, 同时可以证明引起警告的代码是类型安全的就可以在尽可能小的范围内使用@Suppress Warnings( “unchecked”)注解禁止该警告。 要用注释把禁止该警告的原因记录下来。...
2020-09-18 01:10:06
304
原创 带你理解Java泛型擦除
什么是泛型?简单来讲就是Java中提供的一种参数化类型的机制,将类型参数化,意思就是具体的类型通过像普通方法传参一样来决定,比如List<E>,我们可以通过指定传入的E为类型String得到List<String>。就像普通方法的传参一样,我们可以动态的决定传入的类型是什么,从而得到不同结果。Java代码大体上可以分为2个时期,编译时期和运行时期,编译时期IDEA工具会进行一些检测工作,尽可能确保运行时不会出错,比如给一个int型的变量传String类型的值,会编译不过。泛型.
2020-08-27 01:19:31
261
原创 罗列一些编写类与接口时的建议或优化点
区分一个组件设计得好不好,唯一重要的因素在于,它对于外部的其他组件而言,是否隐藏了其内部数据和其他实现细节。 设计良好的组件会隐藏所有的实现细节, 把 API 与 实现清晰地隔离开来。 然后,组件之间只通过 API 进行通信,一个模块不需要知道其他模 块的内部工作情况。 这个概念被称为信息隐藏( info1mation hiding)或封装( encapsulation ), 是软件设计的基本原则之一。应该始终尽可能(合理)地降低程序元素的可访问性。 在仔细地设计了一个最小的公有 API 之后,应该防止.
2020-08-25 02:27:20
141
原创 简述覆盖Object的通用方法
Object类主要提供了equals、等通用方法,下面一一简述一下关键点。equals方法如果有些对象的equals比较的是是否为同一引用,那么可以不复写该方法,Object中的equals已经支持。覆盖equals方法的场景:你需要从业务逻辑上去判断2个对象是否相等;该对象被放置到常用的数据结构中,比如List和Map,当key集为该对象类型时,在使用contains等方法时需要确保对象正确重写了equals方法。覆盖equals方法遵循的约定:1.自反性:(x非null)x.equals(x
2020-08-20 01:56:09
406
原创 读完这个例子就会理解里氏替换原则
接触到一样东西时,需要知道它有什么用?所以先上一个例子,以便明白为什么需要遵循里氏替换原则:假设有一个父类ParentClass,他有2个参数和3个方法:public class ParentClass { int a, b; public void methodOne(int a) { this.a = a; } public void methodTwo(int b) { this.b = b; } //返回a乘以b的结果 public int methodThird()
2020-08-19 03:38:05
189
原创 Java中的依赖注入
解析表面意思:什么是依赖?可以简单地理解为import引入操作,比如import com.xxx.xxx;什么是注入?可以简单地理解为方法传参,就像给方法A(int temp)传入参数20;依赖注入可以理解为把原本要用import引入的资源,通过方法传参的形式引入,进而实现动态的决定要使用何种资源。这里也可以叫控制反转,就是把决定何种资源的控制权交由外部的使用者决定,也就是调用A(int temp)方法去决定。其实这里的依赖,不一定是import引入,也可以是对某个对象的引用,比如类A里会用到类B的.
2020-08-16 18:11:12
677
原创 一些代码编写的细节知识点(持续更新)
因为有些知识点比较小,不好单独写一篇文章,所以专门起了一篇特别的、会持续更新的文章记录这类小知识点对于一些自己项目中的工具类,我们会习惯的使用静态方法去编制它对外提供的功能,比如有个类叫UISizeUtils,它会对外提供一些dp2px(),px2dp()等方法,这些方法都是用static修饰的,这种情况下最好让UISizeUtils的默认构造器变为私有的,这样可以确保它不会被实例化,或者确保使用者不会误解它的用法。...
2020-08-16 16:23:50
194
原创 用Builder模式代替重叠构造器模式和JavaBeans模式
场景:当一个类的构造行数或者静态工厂方法(出门右转)拥有多个传参并且会根据传参的数量生成不同对象的时候,往往容易写出难以阅读和维护的代码,比如:public class Demo { private int p1; private String p2; private boolean p3; ... public Demo(int p1) { this(p1, null); } public Demo(int p1, String p2) { this(p1, p2, false);
2020-08-14 04:57:14
326
原创 带你解析静态工厂方法代替构造器的好处
首先,什么是静态方法?静态方法是使用static关键字标记的方法,它属于类,不属于对象,意思就是,你在使用它的时候不需要创建对象,直接使用类名.方法就能使用,它的特点是在同一个类里,静态方法会被优先分配内存,如果这个方法会在多个地方调用,那么它也只分配了一次内存,而不像实例方法,需要创建多个对象,分配多块内存,所以它的适用场景在于,某个会被常用的公用方法,比如一些工具类的静态方法。什么是静态工厂方法?这里的“工厂”并不是指设计模式中的工厂模式,而只是用于命名一个生产某个类的对象的方法。顾名思义,静态.
2020-08-13 02:15:08
209
原创 Groovy基础点记录
记录一些常用的语法,便于快速查询,如果需要查询详细资料:Groovy官方文档 //定义变量使用def,不需要指定类型,不需要分号 def a = 1 def b = "test" def c = $ { b } //引用 //调用需要传参的方法时,不需要些括号 fun a //定义方法,参数类型可以省略 def fun(data) ...
2019-11-06 00:32:45
161
原创 Android动画基础点记录
补间动画只能改变view的显示,不能改变view的响应位置属性动画只要对象有属性就行,也就是有get/set方法时间插值器:根据时间流失的百分比计算动画进度百分比,定义动画的改变速率、变化规则类型估值器:根据值变化的百分比计算改变后的属性值各自作用?通过补间动画(Tween animation)为Activity自定义切换动画Android系统为Activity设置了默认的切换动画,这...
2019-10-25 00:11:33
675
原创 Android自定义View简述
文章目录onMeasureonDraw自定义ViewGroup组合型自定义ViewonMeasure通过xml的layout_width/height指定自定义View的大小时,可以通过onMeasure指定View对于固定值、wrap_content、match_parent三种模式下的对应策略。protected void onMeasure(int widthMeasureSpec, ...
2019-10-21 00:30:54
251
原创 Android传统布局
摘抄自https://www.jianshu.com/p/4fac6304d872,选取部分觉得需要记录的内容文章目录RelativeLayoutSelectorShapeRelativeLayout基本属性Selector通过设置选择器(selector)可使控件 在不同操作下(默认、点击等) 显示不同样式。Shape作用:设置布局的颜色、边框线demo:<sha...
2019-10-16 23:39:56
157
原创 Android四大组件
摘抄自https://www.jianshu.com/p/51aaa65d5d25,只选取部分觉得需要记录一下的内容,用于查阅Activity生命周期图:onPause()执行相关表示activity正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新activity的显示,onPause必须先执行完,新的activity的onResume才会执行。当...
2019-10-16 23:14:21
238
原创 Android使用DataBinding实现MVVM模式(基本使用)
目录简单配置基本使用(单、双向绑定)一.定义model二.在xml中引入model:三.添加监听事件四.生成databinding,并给databinding赋值:五.使用自定义属性,BindingAdapter缺点分析:简单配置1.app模块下的build.gradle文件的Android块中,添加:dataBinding { enabled = true}2.对生...
2019-05-19 23:19:22
719
原创 Android使用mob实现第三方登录(Facebook、Twitter)
文章目录基本配置1.申请各平台账号,获取各自的key和secret2.添加依赖3.添加插件4.配置MobSdk5.配置平台6.mob在项目中的初始化本文只是做记录和梳理流程,建议到mob官网查看最新文档,毕竟配置和API会更新基本配置1.申请各平台账号,获取各自的key和secretmob平台注册账号,获取key、secret这个比较容易,登录mob官网就知道怎么做了项目需要...
2019-05-09 22:19:20
1790
原创 Android图片相关的工具类
Android图片相关的工具类目前有:打水印,单位转化,大小压缩,质量压缩public class ImageTool { /** * 打水印 * @param src * @param watermark * @param paddingLeft * @param paddingTop * @return ...
2018-03-18 15:21:14
425
原创 Android的一些小问题处理
有些小问题的处理方式(会持续地积累更新):软键盘挤压组件: 对活动添加如下属性 android:windowSoftInputMode=”adjustPan”对于高版本的Android系统调用系统相机报错: 创建一个继承Application的类,在onCreate方法中添加如下代码StrictMode.VmPolicy.Builder builder = new StrictM...
2018-02-19 22:44:13
296
原创 NW.js基础
NW.js基础What can NW.js do?NW.js is based on Chromium and Node.js. It lets you call Node.js code and modules directly from browser and also use Web technologies in your app. Further, you can eas
2018-01-29 15:36:12
248
原创 Node.js Express框架
Node.js Express框架Express导入var express = require('express');var app = express();express的简单用法就是,使用app指定一个请求路径,对应一个get/post/…回调接口,或者指定一个请求目录,对应一个包含多个get/post/…回调接口的路由。express可以独立开启服务器,使用app.listen(port,C
2018-01-10 17:50:29
187
原创 Node.js(基础知识三)
GET对于GET请求,由于所指定想要获取的资源的URL是完整的,因此可以在创建了服务器之后,在回调函数的request参数里,用url和querystring模块提取出客户端的请求参数,即Url中pathname和?之后的内容,然后根据这些信息去做响应的操作和响应。eg:var http = require('http');var url = require('url');var util =
2018-01-10 14:14:22
192
原创 Node.js(基础知识二)
Node.js(基础知识二)Node.js路由通俗地理解,路由是你的请求中所指定需要的数据或者操作的响应封装吧。 我们需要为路由提供请求的URL和其他需要的GET及POST参数,然后路由则可以根据你所提供的数据进行相关的操作,比如说返回对应的数据,比如操作数据库等。使用路由也要引进url和querystring模块,这2个模块里封装的方法便于解析url和里面所设计的参数。 eg
2018-01-09 15:20:46
191
原创 Node.js(基础知识一)
NPM是NodeJS包管理工具; package.json用于定义包的属性; Node.js自带REPL(交互式解释器)。Node.js的异步实现Node.js异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不是使用了回调就实现了异步。 回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。Node.js是单进程、单线程应用
2018-01-09 10:31:26
1169
原创 小白自学前端-XHML
XHTML 是以 XML 格式编写的 HTML。具体什么是 XHTML? XHTML 指的是可扩展超文本标记语言 XHTML 与 HTML 4.01 几乎是相同的 XHTML 是更严格更纯净的 HTML 版本 XHTML 是以 XML 应用的方式定义的 HTML XHTML 是 2001 年 1 月发布的 W3C 推荐标准 XHTML 得到所有主流浏览器的支持 为什么使用 XHTML
2017-12-14 21:59:54
698
原创 小白自学前端-HTML
HTML是超文本标记语言,不是编程语言,而是使用标记标签来描述网页的标记语言。 HTML文档 = 网页。 Web浏览器读取的就是HTML文档,然后以网页的形式显示他们。什么是响应式 Web 设计? RWD 指的是响应式 Web 设计(Responsive Web Design) RWD 能够以可变尺寸传递网页 RWD 对于平板和移动设备是必需的HTML head 元素 head 元素
2017-12-14 21:34:45
320
原创 算法(二)
桶排序冒泡排序快速排序桶排序适用于知道数组值的取值范围(较小)的排序 思想:根据数组的取值范围创建一个从0开始到数组取值范围最大值的桶数组,然后将桶数组中的数初始化为0,然后将数组中的值一一用值对应相对的桶数组下标的值将对应下标指定值+1,然后按顺序打印出桶每个下标值对应次数的下标值。冒泡排序思想:比较相邻的两个元素,如果顺序出错,就交换位置;一趟排好一个数,排数组大小-1趟就排好序列了。
2017-10-13 12:03:08
175
原创 算法(一)
插入排序归并排序分治法排序分治策略分治法求解具有最大和的子数组插入排序适用于少量元素的排序,思想和排序扑克牌一样:一张张地抽取,然后和手中已经排好序的最大的牌进行比较,大之则插入右边,小之则和它的前一张牌比较。 伪代码://[1,j-1]是手中牌,[j,A.length]是待插入的牌for j = 2 to A.length //从待插入的第二张开始,A[1]表示第一张已经抽在手中的牌
2017-10-11 15:50:28
197
转载 算法-计算时间复杂度
一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c<>0 =>O(n^2)依此类推 eg: (1) for(i=1;i<=n;i++)
2017-10-10 17:55:31
1801
原创 网络复习-应用层(部分)
万维网WWW:并不是特殊的计算机网络,它是一个大规模的、联机式的信息储藏所,英文简称Web。万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。超文本:包含指向其他文档的链接的文本。超媒体:内容上不仅限于文本文档的文档。 万维网需要解决的4个问题: 1.怎样标志分布在整个因特网上的万维网文档? 2.用什么样的协议来实现万维网上的各种链接?
2017-10-09 19:41:11
329
原创 网络复习-运输层
网络复习-运输层网络复习-运输层UDP特点报文的首部格式TCPTCP的特点TCP可靠传输的工作原理停止等待协议ARQ连续ARQ协议TCP报文段的首部格式部分重要的TCP的流量控制TCP的拥塞控制慢开始和拥塞避免快重传快恢复TCP的运输连接管理三次握手第三次握手的必要四次挥手第四次挥手的必要网络层主要是主机到主机间的通信,而运输层是进程到进程间的通信。 复用:所有
2017-10-07 16:31:45
248
原创 网络复习-网络层
IP地址的编址方法的3个阶段分类的IP地址子网的划分无分类编址CIDR构成超网IP协议配套使用的3个协议: 地址解析协议ARP,用来得到指定的MAC地址 网际控制报文协议ICMP,是用于处理异常、差错的 网际组管理协议IGMP,是用于多播相关的中间设备: 物理层:转发器 数据链路层:网桥/桥接器(只是扩大网络,没有真正连接网络) 网络层:路由器 网络层以上:网关IP地址的编址
2017-10-04 16:13:45
287
原创 Android将图片保存到本地文件
获取的文件位置获取内部文件也就是只能供自己使用的文件获取外部文件也就是可以供其他程序一起使用的文件为类的每个对象创建获取自己对应图片的文件名称的方法拍照获取的文件位置获取内部文件,也就是只能供自己使用的文件File getFilesDir() 获取/data/data/packagename/files目录FileInputStream openFileInput(String n
2017-09-21 22:49:02
3276
原创 Android实现文字分享
字符串通配符%x$s 代表第几个位置的字符串 <string name="send_note">%1$s 分享了便签给你\n时间:%2$s \n内容:%3$s 。</string> <string name="send_note_subject">来自便签APP</string> <string name="send_note_choose">分享便签</string>使用时:
2017-09-21 16:19:40
606
原创 Android实现简单的闹钟
Android实现简单闹钟Android实现简单闹钟简单的时间格式转化日期选择时间选择确定时间后开启服务在服务里使用AlarmManager定时在AlarmManager里设置到点发送一条广播实现一个BroadcastReceiver接收到定点的广播后发送一条通知简单的时间格式转化 private static String midStr1 = ""; private
2017-09-21 15:06:33
14411
22
原创 RecyclerView实现长按、拖拉、滑动、选中、分割线
长按拖动侧滑选中下滑线一个可以参考一下的便签app还没完善全部功能长按RecyclerView没有提供监听点击事件的接口,没有mRecyclerView.setOn…,但是可以实现一个实现了RecyclerView.OnItemTouchListener接口的监听抽象类,然后调用RecyclerView的addOnItemTouchListener的方法给RecyclerView设置点击的
2017-09-21 14:12:07
1064
1
原创 很详细的Java多线程知识
Java多线程(上)概述进程拥有自己的一整套变量,而线程部署于进程中,同一个进程里的线程共享数据。线程与进程先比带来的好处: 1.效率:共享数据使得线程之间的通信比进程更加地有效和快捷。 2.代价:创建和销毁一个线程比创建和销毁一个进程的开销小得多。线程存在的问题: 线程共享一个进程里的数据,那么在线程不同的、访问进程共享资源的顺序下,可能会对数据造成同步问题。线程的生命周期(六种状态):
2017-09-14 16:08:12
283
原创 集合
集合标签(空格分隔): java数组里保存的可以是对象的值,也可以是对象,而集合只能保存对象。 集合的父类为Collection,Map。Set、Queue、List继承自Collection,xxMap都是继承自Map。 比较多用为ArrayList,HashSet,HashMap,使用迭代器iterator来遍历,有三个通用方法,hasNext,next,remove,继承自接口类Itera
2017-09-12 23:02:31
261
原创 泛型
泛型标签(空格分隔): java泛型没有使用泛型的List使用泛型的List泛型类型泛型类泛型方法通配符泛型边界泛型擦除泛型限制泛型擦除与多态的冲突桥方法擦除总结没有使用泛型的List如果没有使用泛型,List存放的是Object类型,因此可以向List中存放任何类型,不包括基本类型;在获得List里的数据时,由于返回的数据也是Object类型的,所以要进行强制类型转换。Li
2017-09-12 19:57:21
509
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人