自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (1)
  • 收藏
  • 关注

原创 观察者模式——解决解耦的钥匙

观察者模式是一个使用频率非常高的模式,它最常用的地方是GUI系统、订阅——发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间依赖性更小,甚至做到毫无依赖。以CUI系统来说,应用的UI具有易变性,尤其是前期随着业务的改变或者产品的需要修改,应用界面也会经常性变化,但是业务逻辑基本变化不大,此时,GUI系统需要一套机制来应对这种情况,使得UI层与具体的业务逻辑解耦,观察者模式此时就派上用场了。

2023-11-03 10:51:42 467

原创 命令模式——让程序舒畅执行

命令模式(Command Pattern),是行为型设计模式之一。命令模式相对于其他的设计模式来说并没有那么多条条框框,其实并不是一个很“规矩”的模式,不过,就是基于一点,命令模式相对于其他的设计模式更为灵活多变。我们接触比较多的命令模式个例无非就是程序菜单命令,如在操作系统中,我们点击“关机”命令,系统就会执行一系列的操作,如先是暂停处理事件,保存系统的一些配置,然后结束程序进程,最后调用内核命令关闭计算机等,对于这一系列的命令,用户不用去管,用户只需要点击系统的关机按钮即可完成如上一系列的命令。

2023-10-27 13:24:23 310

原创 解释器模式——化繁为简的翻译机

一般情况下,解释器模式中描述的也是形式语言,定义的也是形式文法,当然你也可以用来描述语言和文法,但它们的范畴都太大,而且对我们编程来说很少会涉猎。具体的输出结果就不多说了,大家可以自行尝试,这里我们可以看到接收器模块的一个优点,就是灵活性强,上面的例子中我们只实现了对加减法的解释计算,如果想实现更多的运算法则,如乘除取余等,只需要创建对应的运算接收器即可,但是混合运算要比简单的加减法运算复杂得多,还要考虑不同的符号的运算优先级,这也是文章开头我们说,在“简单的语言”中适用解释器模式。

2023-10-26 16:54:27 169

转载 一文吃透 Kotlin 中眼花缭乱的函数家族

料想 Kotlin 开发者对于其庞大繁杂的函数家族必深有感触: 包括但不限于简化函数、lambda 表达式、匿名函数、高阶函数、扩展函数、内联函数、闭包、顶层函数、局部函数、运算符重载函数等。

2023-09-08 10:44:30 61

转载 Java编程技巧:if-else优化实践总结

一般用来替换if-else的map,我们就是要求在初始化定义后,就不会再允许修改了,因此,这个ImmutableMap生成的map,可以很好地帮我们实现这一点。另外,

2023-05-29 14:15:51 179

原创 责任链模式——使编程更有灵活性

将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直至有对此处理这个请求为止,我们将这样的一种模式称之为责任链模式,这样的解释是不是更通俗易懂呢?对于一条责任链来说,一个请求最终只有两张情况,一是被某个处理对象所处理,另一个是所有对象均未对其处理,对于前一种情况我们称该责任链为纯的责任链,对于后一种情况我们称为不纯的责任链,在实际应用中,我们所见到的责任链模式大多为不纯的责任链。

2023-05-10 14:24:23 542

原创 状态模式——随遇而安

状态模式将这些行为封装到状态类中,在进行操作的将这些功能转发给状态对象,不同的状态有不同的实现,这样就通过多态的形式去除了重复、杂乱的if-else语句,这这正是状态模式的精髓所在。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式就是为了解决这类的问题而出现的,我们将这些状态用对象来替代,将这些行为封装到对象中,使得在不同的状态下有不同的实现,这样就将这些if-else从TvController类中去掉,整个结构也会变得清晰起来。

2023-04-26 11:22:49 620

原创 策略模式——时势造英雄

● 策略模式介绍在软件开发中常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据实际情况选择不同的算法或者策略来完成该功能。例如,排序算法,可以使用插入排序、归并排序、冒泡排序。针对这种情况,一种常规的方法时将多种算法写在一个类中。例如,需要提供多种排序算法,可以将这些算法写在一个类中,每一个方法对应具体的排序算法;当然,也可以将这些排序算法封装在一个统一的方法中,通过if...else...或者case等条件判断语句来选择具体的算法。这两种实现方式我们...

2023-04-25 13:35:25 475

原创 抽象工厂模式——创建型设计模式

● 抽象工厂模式介绍重新工厂模式(Abstract Factory Pattern),也是创建型设计模式之一。上一篇我们已经了解工厂方法模式,那么这个抽象工厂又是怎么一回事呢?大家联想一下现实生活中的工厂肯定都是具体的,也就是说每个工厂都会生产某一种具体的产品,那么抽象工厂意味着生产出来的产品是不确定的,那这岂不是很奇怪?抽象工厂模式起源于以前对不同操作系统的图形化解决方案,如不同操作系统中的按钮和文本框控件其实现不同,展示效果也不一样,对于每一个操作系统,其本身就构成一个产品类,而按钮...

2022-03-21 17:32:59 133

原创 工厂方法模式——应用最广泛的模式

● 工厂方法模式介绍工厂方法模式(Factory Pattern),是创建型设计模式之一。工厂方法模式是一种结构简单的模式,其在我们平时开发中应用很广泛,也许你并不知道,但是你已经使用了无数次该模式了,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的View,并通过setContentView返回给famework处理等,相关内容我们下面再讲,先来看看工厂方法的模式定义。● 工厂方法模式的定义...

2022-03-17 15:53:49 3371

原创 原型模式——使程序运行更高效

● 原型模式介绍原型模式是一个创建型的模式。原型二字表明了该模式应该有一个样板实例,用户从这个模板中复制出一个内部属性一致的对象,这个过程也就是我们俗称的“克隆”。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者构造耗时的实例,应为这种情况下,复制一个已经存在的实例可使程序运行更高效。● 原型模式的定义用原型实例指定创建对象的种类,并通过复制这些原型创建新的对象。● 原型模式的使用场景(1)类初始化需要消...

2022-03-16 14:10:44 661

原创 Builder模式——自由扩展你的项目

● Builder模式介绍Builder模式是一步一步创建一个复杂对象的创建性模式,她允许用户在不知道内部结构细节的情况下,可以更精细地控制对象的构造流程。该模式为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。因为一个复杂的对象有很多大量组成部分,如汽车,有车轮、方向盘、发动机,还有各种小零件等,如何将这些部件装配成一辆汽车,这个装配过程很漫长,也很复杂,对于这种情况,为了在构建过程中对外部隐藏实现细节,就可以使用Builder模式将部件和组...

2022-03-12 15:53:14 3106

原创 应用最广的模式-单例模式

● 单例模式介绍单例模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例纯在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。如在一个应用中,应该只有一个ImageLoader实例,这个ImageLoder中又含有线程池、缓冲池、网络请求等,很消耗资源,因此,没有理由让它构造多个实例。这种不能自由构造对象的情况,就是单例模式的使用场景。● 单例模式的定义确保某一个类只有一...

2022-03-12 11:12:07 325

原创 Android 任务栈简介

一个Android应用程序功能通常会被拆分成多喝Activity,而各个Activity之间通过Intent进行连接,而Android系统,通过栈结构来保存整个App的Activity,栈低的元素是整个任务栈的发起者。一个合理的任务调度栈不仅是性能的保证,更是提供性能的基础。当一个App启动时,如果当前环境中不存在App的任务栈,那么系统就会创建一个任务栈。此后,这个App所启动的Activity都将在这个任务栈中被管理,这个栈也被称为一个Task,即表示若干个Activity的集合,他们组合在一起形成

2020-07-29 09:05:26 1097

原创 Android Activity 详解

● ActivityActivity作为四大组件中出现频率最高的组件,我们在Android的各个地方都能看见它的影子。了解Activity,对于开发高质量的应是非常有用好处的。● 起源Activity是与用户交互的第一接口,他提供了一个用户完成指令的窗口。当开发者创建Activity之后,通过调用setContentView(View)方法来给该Activity指定一个显示界面,并以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activity。● Activity..

2020-07-23 15:16:22 2463

原创 Android 应用最广泛的模式——单例模式

● 单例模式介绍单例模式是应用最广的模式之一,也可能是很多初级工程师唯一会使用的设计模式。在应用这个模式时,代理对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样又利于我们协调系统整体的行为。如在一个应用中,应该只有一个ImageLoader实例,这ImageLoader中又含有线程池、缓存系统、网络请求等。很消化资源,因此,没有理由让它构造多个实例。这种不能自由构...

2020-04-28 14:40:17 241

原创 Android 布局动画

所谓布局动画是指作用在ViewGroup上,给ViewGroup增加View时添加一个动画过渡效果。最简单的布局动画是在ViewGroup的XML中,使用一下代码来打开布局动画。 android:animateLayoutChanges="true"通过以上代码设置,当ViewGroup添加View时,子View会呈现逐渐显示过渡效果,不过这个效果是Android默认的显示的过...

2020-04-16 08:55:46 227

原创 Android 属性动画分析

由于Android 3.0之前已有的动画框架Animation存在一些局限性——动画改变的只是显示,并不能相应事件。因此,在Android 3.0 之后,Google就提出了属性动画这样一个新的动画框架,帮助开发者实现更加丰富的动画效果。而在Animator框架中使用最多的是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator进行更精细化控制,只控制一个对...

2020-04-14 17:14:41 223

原创 Android View 动画框架

Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩形运算完成动画帧。如果动画没有完成,就继续调用inva...

2020-04-07 14:26:27 203

原创 Android View 之孪生兄弟——SurfaceView

▶ SurfaceView与View的区别Android系统提供了View进行绘图处理,View可以满足大家大部分的绘图需求,但在某些时候,缺也有些心有余而力不足,特别是在进行一些开发说的时候。我们知道,View通过刷新来重绘视图,Android系统通过发出VSYNC心里来进行屏幕的重绘,刷新的时隔时间为16ms。如果在16ms内View完成了你所需要执行的所有操作,那么用户在视觉上,就不会产...

2020-04-03 14:24:37 199

原创 Android PathEffect

要理解PathEffect,先来看着一张比较直观的图,来了解一下什么是PathEffect,如图(1)所示。 图(1)PathEffectPathEffect就是指,用各种笔触效果来绘制一个路径。Android系统提...

2020-04-02 15:33:42 323

原创 Andoid Shader 着色器、渲染器

Shader又被称为着色器、渲染器,它用来实现一系列的渐变、渲染效果。Android中的Shader包括以下几种。● BitmapShader——位图 Shader●

2020-04-01 11:24:17 313 1

原创 Android 画笔特效处理——刮刮卡效果

不管是在我们的世界里,还是在Android的世界里,要想向神笔马良一样画出各种经常决绝的画,就必须有一个前提——要有一支神奇的画笔。我们应该对一些常用的画笔属性有所了解,比如普通的画笔(Paint),带边框、填充的style,颜色(Color),宽度(StrokeWidth),抗锯齿(ANTI_ALIAS_FLAG)等,这些都是最近的画笔属性,就好像一个普通人说拥有的画笔工具。然而除此之外,还有各...

2020-01-09 17:10:24 390

原创 Android 变形矩阵——Matrix

对于图像的色彩处理,Android系统提供了ColorMatrix颜色矩阵来帮助我们进行图像处理。而对于图像的图形变化,Android系统也是通过来进行处理的,每个像素点都表达了其坐标的X、Y信息。Android的图形变换矩阵是一个3x3的矩阵,如图(1)所示。当使用变换矩阵去处理每一个像素点的时候,与颜色矩阵的矩阵乘法一样,计算公式如下所示。 X1 = a * X ...

2020-01-07 14:12:16 396

原创 Android颜色矩阵——ColorMatrix

通过前面的分析,我们知道了调整颜色矩阵可以改变一副图像的色彩效果,图像处理很大程度上就是在寻找处理图像的颜色矩阵。不仅仅可以通过Android系统提供的API来进行ColorMatrix的修改,同样可以精确地修改矩阵的值来实现颜色效果的处理。下面我们就模拟一个4*5的颜色矩阵。通过修改矩阵中的值,一来验证全面所说的改变图像色彩效果的原理是否正确,二来对矩阵变换产生的作用效果有更清晰地认识。程序...

2019-12-20 14:49:48 692

原创 Android 图像处理之色彩特效处理-彩色矩阵分析

Android对于图片的处理,最常使用的数据结构是位图——Bitmap,它包含了一张图片的所有的数据。整个图片都是有点阵和颜色值组成的,所谓点阵就是一个包含像素的矩阵,每一个元素对应着图片的一个像素。二颜色值——ARGB,分别对应透明度、红、绿、蓝、这四个通道分量,它们共同决定了每个像素点显示的颜色,图(1)就是显示了自然界中的色光三原色。 ...

2019-12-20 11:40:30 1020

原创 Android 绘图技巧

在前面我们说了Android的基本绘图技巧,下面我们聊聊Android中常用的一些绘图技巧。通过这些技巧学习来简化、优化Android的绘图操作。一、CanvasCanvas作为绘制图形的直接对象,提供了以下几个非常有用的方法。● Canvas.save()● Canvas.restore()● Canvas.translate()● Canvas.rotate()...

2019-08-01 11:18:56 332

原创 Android XML绘图

XML在Android系统中可不仅仅是Java的一个布局文件、配置列表。在Android开发者的手上,它甚至可以变成一张画、一幅图、Android的开发者给XML提供了几个强大的技能来帮助我们实现这一功能。一、Bitmap在XML中使用Bitmap非常简单,代码如下所示。<?xml version="1.0" encoding="utf-8"?> <bitm...

2019-06-10 11:32:49 421

原创 Android 2D绘图基础

系统通过提供的Cancas对象来提供绘图方法。它提供了各种绘图图像的API,如drawPoint(点)、drawLine(线)、drawRect(矩形)、drawVertices(多边形)、drawArc(弧)、drawCircle(圆),等等。通过他们的名字,我们就可以基本大致了解他们的功能。当然,Paint作为一个非常重要的元素,功能也是很强大的,这里简单地列举一些它的属性和对应的功能。●...

2019-06-06 10:44:54 974

原创 Android 屏幕的尺寸信息

Android的手机屏幕,不管是分辨率还是大学都是五花八门、千奇百怪的,这在一定程度上造成了绘图是的难度。想要在不同屏幕上保持绘图的准确性,那么我们必须对这些屏幕有充分的的认识。一、屏幕参数一块屏幕通常具有以下几个参数。● 屏幕大小值屏幕对角线的长度,通常使用“寸”来度量,例如4.7寸的手机,5.5寸的手机等。● 分辨率分辨率是指手机屏幕的像素点个数,例如720*128...

2019-06-05 17:35:52 367

原创 Android Scroll 分析之实现滑动的七种方法

当了解了Android坐标系和触控事件以后,我们再来看看如何使用系统提供的API来实现动态地修改一个View的坐标,即实现滑动效果。而不管采用哪一种方法,其实实现的思路基本是一致的,当触摸View时,系统记下当前触摸点坐标;当手指移动时,系统记下移动后触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改View的坐标,这样不断重复,从而实现滑动过程。下面我们就通过一个实例,来看...

2019-06-05 10:16:09 613

原创 Android Scroll 分析之滑动效果是如何产生的

相对于Android2.X版本中常见的长按、点击操作,滑动的操作方式具有更好的用户体验性。因此,从Android4.X版本开始,滑动操作就大量出现在了Android系统当中,各种第三方应用也竞相 模仿这种效果,来改善自己的应用,本章就将向大家展示如何在应用中添加滑动效果。● 滑动效果是如何产生的滑动一个View,本质上来说就是移动一个View。改变其当前所处的位置,它的原理与动画效果的实...

2019-05-31 11:07:27 129

原创 arcgis for android 离线空间数据叠加分析

arcgis for android 离线空间数据叠加分析arcgis for android 离线空间数据是调用geodatabase文件,geodatabase文件里面可以有很多次图层比如地类、基本农田、建设用地等等。如果我们现在有一个需求要在底图上画一块范围去和各个图层去叠加分析该怎么实现。比如圈定一块范围去和地类分析,分析出圈定的范围都包括什么地类,一种地类占用多少亩等...

2019-05-31 08:43:30 1202 5

原创 ListView 常用优化技巧

ListView的基本用法相信大多数读者都已经能够非常熟练的使用了,下面我们就着重来学习一下使用ListView的技巧。● 使用ViewHolder模式提高效率ViewHolder模式是提高ListView效率的一个很重要的方法。ViewHolder模式充分利用了ListView的视图缓存机制,避免了每次在调用getView()的时候都去通过findViewById()实例化控件。据测试...

2019-03-29 14:48:51 290

原创 Android 自定义ViewGroup

前面的文章我们学习了如何自定义View,下面我们继续来分析如何创建自定义ViewGroup。ViewGroup存在的目的就是为了对其子View进行管理,为子View添加显示、相应的规则。因此,自定义ViewGroup通常需要重写onMeasure()方法来对子View进行测量,重写onLayout()方法来确定子View的位置,重写onTouchEvent()方法增加相应事件。下面通过一个实例,来...

2019-02-14 14:41:25 290

原创 Android 重写View来实现全新的控件

 当Android系统原生的控件无法满足我们的需求时,我们就可以完全创建一个新的自定义View来实现需要的功能。 创建一个自定义View,难点在与绘制控件和实现交互,这也是评价一个自定义View优劣的标准之一。通常需要继承View类,并重新它的onDraw()方法、onMeasure()等方法来实现绘制逻辑,同时通过重写onTouchEvent()等触控事件来实现互交逻辑,当然,我们还可以像实...

2019-02-13 16:28:20 357

原创 Android View创建复合控件

创建复合控件可以很好的创建出具有重用功能的控件集合。这种方法通常需要继承一个合适的ViewGroup,再给它添加指定的功能控件,从而组合成新的复合控件。通过这种方式创建的控件,我们一般我们会给它一些可配置的属性,让它具有更强的拓展性。下面就以一个TopBar为示例,讲解如何创建复合控件。我们知道为了应用程序风格的统一,很多应用程序都有一些共通的UI界面,比如图(1)中所示的TopBar这样一个...

2019-01-29 17:36:57 224

原创 Android 对现有控件进行拓展

这是一个非常重要的自定义View的方法,它可以在原生控件的基础上进行拓展,增加新的功能、修改显示的UI等。一般来说,我们可以在onDraw()方法中对原生控件行为进行拓展。下面以一个TextView为例,来看看如何使用拓展原生控件的方法创建新的控件。比如像让一个TextView的背景更加丰富,给其多绘制几层背景,如图(1)所示。                             ...

2019-01-28 11:47:50 222

原创 Android 自定义View

Android给我们提供了丰富的组件库来创建丰富的UI效果,同时也提供了非常方便的拓展方法。通过集成Android的系统组件,我们可以非常方便的拓展现有功能,在系统组件的基础上创建新的功能,甚至可以自己自定义一个控件。实现Android系统控件所没有的功能。自定义控件作为Android中的一个非常重要的功能,一直以来都被初学者认为是代表高手的象征。其实,自定义View并没有想象中的那么难,与其说是...

2019-01-25 14:38:21 78

原创 Android ViewGroup的测量和绘制

● ViewGroup的测量我们在前面的分析中说了,ViewGroup会去管理子View,其中一个管理项目就是负责子View的显示大小。当ViewGroup的大小为wrap_content时,ViewGroup就需要对子View进行遍历,以便获取所有子View的大小,从而来决定自己的大小。而在其他模式下则会通过具体的指定值来设置自身的大小。ViewGroup在测量时通过遍历所有子View,...

2019-01-25 09:28:59 379

arcgis for android 离线空间数据叠加分析

arcgis for android 离线空间数据叠加分析,实现对圈定范围的叠加分析

2018-04-24

空空如也

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

TA关注的人

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