自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Kotlin基础语法----高阶函数和Lambda

Kotlin语言天然支持了部分函数式特性。函数式语言一个典型的特性在于函数是头等公民–我们不仅可以像类一样在顶层直接定义一个函数,也可以在一个函数内部定义一个函数,如下所示:fun foo(x:Int) { fun double(y:Int):Int { return y+2 } println(double(x))}此外,我们还可以直接将函数像普通变量一样传递给另一个函数,或者在其他函数内被返回。1.抽象和高阶函数所谓的高阶函数,我们可以把它理解成“以其

2020-09-17 17:42:25 220

原创 Flutter基础组件之按钮

1.Material组件库中的按钮Material 组件库中提供了多种按钮组件如RaisedButton、FlatButton、OutlineButton等,它们都是直接或间接对RawMaterialButton组件的包装定制,所以他们大多数属性都和RawMaterialButton一样。在介绍各个按钮时我们先介绍其默认外观,而按钮的外观大都可以通过属性来自定义,我们在后面统一介绍这些属性。另外,所有Material 库中的按钮都有如下相同点:按下时都会有“水波动画”(又称“涟漪动画”,就是点击时按钮上

2020-09-12 23:15:40 214

原创 Kotlin基础语法----不一样的类型声明

从我刚开始学习kotlin时,第一个感受到的与众不同的语法就是变量声明了。我们都知道,在Java中,我们会把类型名放在变量名的前面,如:String a=“Java天下第一”;Kotlin一改Java的做法,通常将类型名放在变量名的后面,如:val a:String=“Hello kotlin”;至于为何要这么做?大概就是这样可以使得代码的可读性能更好吧!1.增强的类型推导类型推导是kotlin在Java基础上增强的语言特性之一,就是编译器可以在不显示声明类型的情况下,自动推导出它所需要的类型。

2020-09-12 19:30:07 320

原创 Flutter基础组件之文本

Flutter基础组件之文本(1)TextText用于显示简单样式文本,它包含一些控制文本显示样式的一些属性。示例代码如下:Column( children: [ Text( "Hello world", textAlign: TextAlign.left, ), Text( "Hello world! I'm Jack.

2020-09-12 00:09:19 168

原创 Python学习(二)

Python的数组

2019-04-04 16:31:43 198

原创 Python学习(一)

注释注释是使用自己熟悉的语言,在代码片段中加入,以增强代码的可阅读性。单行注释多行注释

2019-04-04 16:30:58 227

原创 使用Python3.7.3+Pycharm搭建开发环境

一、Python3.7.3的安装首先去官网上下载Python3.7.3双击Python3.7.3.exe第1步:勾选上Add Python3.7 to Path选项第2步:点击Install Now紧接着就是安装过程了:点击Close关闭,然后打开DOS窗口,来验证Python3.7.3是否安装成功二、PyCharm的安装去官网上下载Pycharm的正式版点击PyChar...

2019-04-04 14:21:09 4185

原创 自定义实现Toast效果

该自定义Toast用到了定时器和PopupWindow,鉴于Popupwindow在7.0以上位置显示有异常,所以先解决该问题。public class FixedPopupWindow extends PopupWindow { public FixedPopupWindow(View contentView, int width, int height) { ...

2018-08-01 17:17:28 421

原创 Android GradientDrawable动态设置背景

平时我们对GradientDrawable的使用都是静态使用,也就是在xml中使用shape标签定义。 其实呢,我们也可以在代码中动态设置背景。//新建一个Drawable对象GradientDrawable drawable=new GradientDrawable();//设置背景色drawable.setColor(Color.rgb(255,0,0));//设置边框的厚度...

2018-07-25 10:35:43 5191

原创 变量、作用域和内存问题

从前面的学习中,我们可以感觉到,JavaScript的变量与其他语言的变量有很大区别。JavaScript变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已。由于不存在定义某个变量必须保存何种数据类型值的规则,变量的值以及其数据类型可以在脚本的生命周期内改变。基本类型和引用类型的值ECMAScript变量可能包含两种数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的

2017-09-28 00:10:05 226

原创 菜鸟初体验之----DataBinding

构建环境1.首先,确保能使用Data Binding,需要下载最新的 Support repository。否则可能报错2.在模块的build.gradle文件中添加dataBinding配置android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { application

2017-09-25 22:06:26 613

原创 菜鸟学设计模式----迭代器模式

迭代器模式是java和.NET环境中一种非常常用的设计模式,属于行为型模式。这种模式用来顺序访问集合对象的元素,而不用关心其底层表示。介绍意图:提供一个方法可以顺序访问聚合对象的元素,而不用暴露该对象的内部表示。 解决:不同的方式遍历整个集合对象 何时使用:遍历一个聚合对象 如何解决:把元素之间游走的职责交给迭代器,而不是聚合对象 关键代码:hasNext()、Next()接口 应用实例:

2017-09-20 11:28:57 419

原创 菜鸟学设计模式----代理模式

代理模式中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,创建有现有对象的对象,以便向外界提供接口。介绍意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系

2017-09-19 17:09:31 477

原创 菜鸟学设计模式----过滤器模式

过滤器模式或者说是标准模式是一种设计模式,它允许开发人员使用不同标准去过滤同一组对象,通过逻辑运算,以解耦的方式将它们连接起来。这种类型的设计模式属于结构型模式,它结合 多个标准来获取单一标准。实现创建一个 Person 对象、Criteria 接口和实现了该接口的实体类,来过滤 Person 对象的列表。CriteriaPatternDemo,我们的演示类使用 Criteria 对象,基于各种标准

2017-09-19 16:07:39 611

原创 创建Html文档

这篇学习的是最基本的HTML元素:文档元素和元数据元素。它们是用来创建Html文档和说明其内容的元素。1.构建基本的文档结构 文档元素有4个,这些基本元素确定了Htmlz文档的轮廓以及浏览器的初始环境,任何HTML文档都需要这些元素。1.1 DOCTYPE元素 每个Html文档都必须以DOCTYPE元素开头,告诉浏览器得知自己将要处理的是Html元素。虽然省略DOCTYPE这一元素,大

2017-09-18 09:32:52 653

原创 菜鸟学设计模式----桥接模式

桥接用于把抽象化和实例化解耦,使得两者可以独立变化。这种类型的设计模式属于结构型模式,通过提供抽象化和实现化之间的桥接结构,来实现解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。介绍 意图:将抽象部分与实现部分相分离,使它们可以独立的变化。 主要解决:在有多种变化的情况下,类继承可能会造成类爆炸的问题,扩展不是很灵活 何时使

2017-09-14 16:06:19 244

原创 菜鸟学设计模式----状态模式

在状态模式中,类的行为是基于它的状态改变的,这种类型的模式属于行为型模式。在状态模式中,创建各种状态的对象和一个行为随着状态对象改变而改变的context对象。介绍意图:允许对象内部状态发送变化的时候改变行为,对象看起来好像修改了它的类 主要解决:对象的行为依赖于它的状态,根据状态的变化而改变它的相关行为。 何时使用:代码中包含很多与对象状态有关的条件语句 如何解决:将具体的抽象类抽象出来

2017-09-13 16:12:49 329

原创 菜鸟学设计模式----组合模式

组合模式又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式用树形结构来组合对象,用来表示部分以及整体的层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。介绍意图:将对象组合成树形结构比表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决:它在树形结构

2017-09-13 11:31:35 301

原创 JavaScript基本概念(四)

1.语句1.1 if语句if语句的语法格式为:if(condition) statement1 else statement2 condition可以是任何表达式,而且对这个值的求值结果不一定是布尔值,ECMAScript会调用Boolean()转换函数将表达式的结果转换成一个布尔值。如果该值为true,执行statement1;如果该值为false,则执行statment2。statement1

2017-09-13 00:11:40 285

原创 CSS的长度、角度、时间

许多CSS属性都需要设置长度值,比如我们之前用过的width和font-size属性,下面是一个简单的Demo:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> p{ backgr

2017-09-12 21:03:27 465

原创 菜鸟学设计模式----装饰器模式

装饰器模式允许向一个现有对象中添加新的功能,而又不改变它的结构,它属于结构型模式,作为现有类的一个包装。这种模式创建了一个包装类,用来包装原有类,在保证原有类的方法签名的完整的前提下,提供了额外的功能。介绍意图:动态地给现有对象增添一些额外的职责。就增加功能这点而言,装饰器模式比生成子类更加灵活。 主要解决:一般我们为了拓展一个类经常使用继承的方式,由于继承为类引入静态特征,随着新增的功能的增加,

2017-09-12 16:21:07 250

原创 菜鸟学设计模式----外观模式

外观模式属于结构型模式,通过向客户端提供一个可以访问的系统的接口来隐藏系统的复杂性。在这种模式下,会涉及到一个单一的类,用于提供客户端请求的方法和对系统现有类方法的委托调用。介绍意图:通过为子系统的一组接口提供一个一致的界面,外观模式定义了一个高级接口,这个接口使子系统更加容易使用。 主要解决:降低访问复杂系统内部子系统的复杂度,简化客户端与其之间的接口。 何时使用:1.客户端不需要知道系统内部

2017-09-12 11:26:19 316

原创 菜鸟学设计模式----原型模式

原型模式是用来创建重复的对象,同时又能保证性能的一种建造者模式,它提供了一种创建对象的最佳方式。 这种模式使用了一个原型接口,该接口用于创建当前对象的克隆。当创建对象消耗太大的时候,使用这种模式。。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。介绍意图:用原型实例指定创建对象的种类,并且通过拷贝这

2017-09-11 20:22:24 276

原创 菜鸟学设计模式----建造者模式

建造者模式使用多个简单的对象一步步构成一个复杂的对象。这种类型的设计属于创建型模式,它提供了一种创建对象的最佳方式。一个Builder类会一步步构造最后的对象,该Builder是独立于其他对象的。介绍 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 主要解决:主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于

2017-09-11 19:20:03 934

原创 菜鸟学设计模式----责任链模式

这种设计模式属于行为型模式,它为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在 这种模式中,通常一个接收者中都包含另一个接收者的引用,如果一个对象不能处理该请求,那么该请求将会传给下一个接收者,以此类推。介绍意图:避免请求的发送者和接收者耦合在一起。让多个对象可以接收请求,将这些请求连接成一条链,并沿着这条链传递请求,直到有对象可以处理它为止。 主要解决:

2017-09-11 15:40:09 235

原创 菜鸟学设计模式----观察者模式

当对象存在一对多的关系时,则可以使用观察者模式。最常见的就是当一个对象被修改时,通知它的依赖对象。观察者模式属于行为型模式。整体介绍意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖它的对象都得到通知并自动更新。 主要解决:一个对象状态改变需要通知其他对象的问题,而且需要考虑到易用和低耦合,保证高度的协作。 何时使用:当一个目标对象状态发生改变的时候,通过广播通知,

2017-09-11 12:35:57 334

原创 设计模式----总览

首先需要了解一下软件设计原则: 1.单一职责原则 2.开闭原则 3.里氏代换原则 4.依赖倒转原则 5.接口隔离原则 6.合成复用原则 7.迪米特原则设计模式大致有23种,主要分为三类:结构型模式、创建型模式、行为型模式。结构型模式用于类或对象的组合,主要有: 1.适配器模式 2.桥接模式 3.组合模式 4.装饰模式 5.外观模式 6.享元模式 7.代理模式创建者模式主要

2017-09-11 09:51:32 281

原创 Android面试题----Broadcast问题

一、Broadcast1.定义 运用了观察者模式思维,是一种广泛运用在应用程序之间的传输信息的机制,发送的广播是一个Intent,这个Intent可以携带我们想要的数据。不同程序之间应用程序之间数据共享。2.广播的使用场景 (1)同一App具有多个进程的不同组件之间的消息通信 (2)不同App的组件之间的通信3.广播种类 (1)NormalBroadcast Context.sendBroa

2017-09-08 15:34:24 441

原创 Android面试题----Fragment问题

一、Fragment为什么被称为第五大组件?1.Fragment为什么被称为第五大组件? (1)有自己的生命周期 (2)使用频率高2.Fragment加载到Activity的两种方式? (1)添加Fragment到Activity的布局文件中去。 (2)动态在Activity中添加Fragment。3.FragmentPagerAdapter和FragmentStatePagerAdapt

2017-09-08 15:14:53 528

原创 Android面试题----Activity相关问题

一、Activity生命周期1.activity的四种状态(1)Running 当一个活动位于返回栈的栈顶的时候,此时Activity就处于Running状态 (2)Paused 当一个Activity不再处于栈顶却依然可见的时候,这个时候,就进行了Pause状态。因为并不是每个Activity都占满整个屏幕,如果新的Activity是以对话框的形式仅仅占用屏幕的中间位置,那么之前的Acti

2017-09-06 13:47:46 514

原创 Java8 Lambda表达式例子

例1 用lambda表达式实现Runnable 例2 使用Java 8 lambda表达式进行事件处理 例3 使用lambda表达式对列表进行迭代 例4 使用lambda表达式和函数式接口Predicate 例5 如何在Lambda表达式中使用Predicate 例6 Java 8中使用lambda表达式的Map和Reduce示例例7 通过过滤创建一个String列表 例8 对列表的每个

2017-09-05 18:43:28 305

原创 Android Studio中使用Lambda表达式

1.首先确保使用的JDK为1.8 2.将 sourceCompatibility和 targetCompatibility手动修改成1.8 3.在build.gradle处添加在dependencies根下添加classpath ‘me.tatarka:gradle-retrolambda:3.2.0’ 4.在app下的build.gradle中添加apply plugin: ‘me.tat

2017-09-05 16:49:14 287

原创 paint的色彩矩阵以及滤镜效果

色彩矩阵对于色彩的存储,Bitmap类采用了一个32位的数值来存储。红、绿、蓝、透明各占8位,每一个色彩分量的取值范围为0-255,。透明度为0表示完全透明,为255表示完全可见。1.色彩信息的矩阵表示: 四阶表示: 由于一个色彩信息包含R、G、B、Alpha信息,所以,我们必然要使用一个4阶色彩变换矩阵来修改色彩的每一个分量值:注意:对于色彩变换矩阵,这里的色彩顺序是R、G、B、A而不是A、R

2017-09-04 15:37:18 836

原创 事件分发机制---ViewGroup

@Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mInputEventConsistencyVerifier != null) { mInputEventConsistencyVerifier.onTouchEvent(ev, 1); }

2017-08-31 11:26:52 215

原创 Paint类的其它函数

在之前我们已经接触了Paint类的一些方法,下面是一些之前没有接触过的方法: setStrokeCap(Paint.Cap cap) 设置线冒样式,取值有Cap.ROUND(圆形线冒)、Cap.SQUARE(方形线冒)、Paint.Cap.BUTT(无线冒) 下面是这些方法的简单使用:1.setStrokeCap(Paint.Cap cap)设置线冒样式,取值有Cap.ROUND(圆形线冒)、

2017-08-29 05:15:46 526

原创 Canvas---drawText()

概述 1.基线基线相当于小学写英语的四格线的第三条线,只要基线的位置确定了,那么绘制的文字的位置就可以确定了。2.canvas.drawText()方法(1)Canvas与基线现在就以最简单的方法为例:public void drawText(String text, float x, float y, Paint paint)传进去的x和y很容易被误解为绘制文字的矩形的左上角,其实y是基线的位

2017-08-28 22:07:46 1054 1

原创 Canvas---Canvas变换与操作

平移Canvas类提供了一个translate()方法就是用来平移画布,以左上角为原点,向右为x轴正方向,向下为y轴正方向。将画布沿着x轴和y轴的正方向都移动200像素之后,在画布上绘制一个图形:canvas.translate(200,200); RectF rectF=new RectF(0,0,400,200); canvas.drawRect(rectF,pa

2017-08-24 23:28:41 351

原创 Canvas---区域(Range)

构造Region构造Region有4个构造函数 public Region() //创建一个空的区域 public Region(Region region) //拷贝一个region的范围 public Region(Rect r) //创建一个矩形的区域 public Region(int left, int top, int right, int bottom) //创建

2017-08-23 17:08:22 927

原创 Canvas---文字的绘制

文字1.与Paint相关的设置//普通设置 paint.setStrokeWidth (5);//设置画笔宽度 paint.setAntiAlias(true); //指定是否使用抗锯齿功能,如果使用,会使绘图速度变慢 paint.setStyle(Paint.Style.FILL);//绘图样式,对于设文字和几何图形都有效 paint.setTextAlign(Align.CENT

2017-08-22 19:33:04 2276

原创 Canvas---路径的绘制

绘制路径绘制路径的方法为:void drawPath(Path path,Paint paint);1.直线路径Path类有个close方法,当绘制的直线没有闭合的时候,调用close方法会将收尾连接起来。moveTo方法表示该条直线的起点,lineTo表示该条直线的终点。下面看一下自行闭合路径和没有闭合路径而调用close方法的情形。Path path=new Path(); pa

2017-08-22 10:53:36 863

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