自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android高级进阶——自定义View实践篇(三)蜘蛛网评分控件实现原理

效果图如下: - 五边形 三角行 六边形 七边形 十二边形 这个效果其实并不是特别的难,只要知道了原理其实很简单这里为了简单,数据都是直接写死的,有兴趣的可以把共有属性拿出来通过自定义属性来实现难点主要是怎么根据角度计算圆上的坐标,直接上代码float centerX = 100f; // 已知圆心X坐标为100float centerY ...

2018-05-02 21:53:45 927

原创 Android高级进阶——自定义View实践篇(二)好看的打钩小动画

效果图如下: 因为GIF上传有限制而且有点小卡,录制的效果不是特别的好,但是也可以了解要显示的效果是怎样的。实现思路这个 view 大致分为 4 个过程,分段来,后面会给出完整代码 - 1、点击之前显示为: 想要实现这个效果非常简单,只需要调用 canvas 的 drawAcdrawArc 方法即可实现,难点在于 对勾 的绘制,我这边是这样计算的: ...

2018-05-01 18:26:48 837

原创 Android高级进阶——自定义View实践篇(一)自定义标签流布局

开篇前面已经介绍了一系列的 View 的自定义,后面的几篇会找几个实际的例子来动手练一下,今天就先瞅瞅 标签流容器先给出效果图:这个自定义 View 是非常简单的,只要你把前面的 view 的工作原理一、二、三 大致看一遍就可以很轻松的撸出来自定义 View 的种类自定义 View 的分类标准不唯一,大致可以分为 4 类1、继承 View 重写 onDraw 方法...

2018-04-30 23:10:14 946

原创 Android高级进阶——绘图篇(八)Canvas与图层(二)

一、FLAG的具体意义1、FLAG概述有关save系列函数,在canvas中总共有如下几个: public int save() public int save(int saveFlags) public int saveLayer(RectF bounds, Paint paint, int saveFlags) public int saveLayer(f...

2018-04-26 08:50:50 2228

原创 Android高级进阶——绘图篇(七)Canvas 与 图层(一)

开篇前面很多篇文章都用到了图层的概念,但是一直没有详细介绍,今天这篇文章将详细的介绍 Canvas 与 图层的概念一、如何获得一个Canvas对象方法一:自定义view时, 重写onDraw、dispatchDraw方法protected void onDraw(Canvas canvas) { super.onDraw(canvas); } pr...

2018-04-24 21:22:30 9631 4

原创 Android高级进阶——绘图篇(六)setXfermode混合模式实际使用

开篇本篇我们将使用不同模式来实现一些常见效果,具体看下文吧示例1、区域波纹这种效果是不是看着挺炫的?复杂么?NO! 非常简单,首先你需要去考虑采用什么方式可以实现这种效果的展示,一般出现这种情况首先考虑的就是采用混合模式(setXfermode方法是在混合的模式实现),那么混合模式那么多,要具体使用哪一个呢?其实上篇博客我们介绍了 最常用的四种,SRC_IN、DST_IN、...

2018-04-24 21:20:09 1793

原创 Android高级进阶——绘图篇(五)setXfermode 设置混合模式

一、GPU硬件加速1、概述GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”。与CPU不同,GPU是专门为处理图形任务而产生的芯片。 在GPU出现之前,CPU一直负责着所有的运算工作,CPU的架构是有利于X86指令集的串行架构,CPU从设计思路上适合尽可能快的完成一个任务。但当面对类似多媒体、图形图像处理类型的任务时,就显得力不从心。因为在多媒体...

2018-04-23 22:45:01 3149

原创 Android高级进阶——绘图篇(四)Paint常用函数介绍

开篇:经过前几篇,我们基本把paint和canvas的基本用法就看完了,今天我们来个大汇总,列举一个paint的所有函数,然后一个一个的过。经过这几篇,你将能学会paint中所有处理函数的用法。一、基本用法1、概述 我们先来看一下paint中基本设置的函数都有哪些: reset() :重置画笔 setColor(int color) :给画笔设置颜色...

2018-04-22 19:16:02 845

原创 Android高级绘制——绘图篇(三)路径Path绘制以及贝塞尔曲线使用技巧

开篇废话不说了,直接开凿吧!这篇这要说一下路径(path)的绘制技巧以及 神一样的存在(贝塞尔曲线)的绘制基本绘制1、直线路径 void moveTo(float x1,float y1):直线的开始点,即将直线路径的绘制点定在(x1,y1)的位置; void lineTo(float x2,float y2):直线的结束点,又是下一次绘制路径的开始点,line...

2018-04-22 19:13:18 7304

原创 Android高级进阶——绘图篇(二)Canvas绘制文本 drawText详解

开篇上篇介绍了 Canvas 的基本操作,绘制圆、矩形、椭圆、弧等,Canvas 除了这些操作还有两个比较重量级的绘制能力 Text(文本)和 Path(路径),今天就先看一下 Text 的绘制先看一下 Paint 对于 Text 都提供了那些设置吧:Paint 对于 Text 的相关设置普通设置 paint.setStrokeWidth(5):设置画笔宽度 p...

2018-04-22 19:05:41 23703 3

原创 Android高级进阶——绘图篇(一)Canvas基本操作

开篇前面在介绍 onDraw 过程时,有提到 View 的绘制(Canvas 的使用),后续的几篇会详细的介绍有关 Canvas 以及 Paint 的相关操作。Canvas 和 PaintCanvas 和 Paint 之间的关系就像我们平时画画需要的画笔和画纸一样,我们画画无外乎也就需要这两个工具,而这两个工具体现在 Android 中,就是我们的 Paint(画笔)和 Canvas(...

2018-04-19 20:15:54 1444 3

原创 Android高级进阶——View的工作原理Draw过程

开篇:前两篇已经详细的介绍了 Measure 以及 Layout 过程,就剩下一个 Draw 绘制过程了,Draw 其实也不是很复杂,但是想要彻底掌握绘制的技巧就需要了解 Canvas 的使用了,后续会再开几篇详细介绍 Canvas 的具体使用老规矩,还是先给出 ViewRootImpl#performTraversals 方法ViewRootImpl#performTravers...

2018-04-18 19:53:33 589

原创 Android高级进阶——View的工作原理Layout过程

开篇: 上一篇已经了解了 View 的工作原理之 Measure 过程,了解到 Measure 过程是从 ViewRootImpl#performTraversals 开始的,最后会执行到 onMeasure 方法,也对自定义 View 时 margin、padding 以及 wrap_content 如何处理已经简单说明,下面开始 Layout 过程。还是从 ViewRootImpl#pe...

2018-04-12 20:24:57 398

原创 Android高级进阶——View的工作原理Measure过程详解

开篇本篇主要讲解的是 View 工作原理之 measure 过程,主要是以源码的形式进行分析,源码来源 API 26。从 ViewRootImpl 的 #performTraversals 方法开始说起performTraversals 方法是整个工作流程的核心,它里面分别取执行了 measure、layout 以及 draw 三个过程,看一下代码:private void...

2018-04-12 09:02:05 453

原创 Android非常牛叉的表格编辑库SmartTable,让复杂表格变得So Easy

最近项目需求需要制作一个表格展示效果,先看下UI图吧:刚开始接收到这个需求的时候,第一反应就是使用 RecyclerView 来进行实现,谁让 RecyclerView 那么牛逼呢?不用纠结 RecyclerView 完完全全可以实现这种效果,无外乎可能就是稍微复杂些 RecyclerView 实现思路: - 最外层采用 HorizontalScrollView,保证表格可以...

2018-04-06 19:33:59 18685 17

转载 预知Bug的神器——Support Annotation Library使用详解

Support Annotation Library 是从 Android Support Library 19.1 开始引入的一个全新的函数库,它包含了一系列有用的元注解,用来帮助开发者在编译期间发现可能存在的 Bug。Annotation Library 默认情况下不会包含在工程中,如果我们的 SDK 已经安装了 Android Support Repository,那么我们可以通过打开工...

2018-04-05 18:16:01 471

原创 Java设计模式之——代理模式

代理模式简单介绍代理模式也称为委托模式,是结构型设计模式之一。那么何为代理呢?其实代理在我们日常生活中也并不少见,对于程序员来说最常接触的莫过于代理上网了,连上代理服务器地址,就可以轻松畅游全世界的网络;还有每天吃饭时赶进度是常事,叫公司的同时帮忙买饭也是一种代理等等…总而言之,也许你并不留意,但是代理的确是无处不在,现实生活中如此,我们的 Code 世界里也是如此!既然如此,我们来深究一下代理模式

2016-11-03 22:32:14 922

原创 Java设计模式之——适配器模式

适配器模式简单介绍适配器模式在我们的开发中使用率极高,从代码中随处可见的 Adapter 就可以判断出来。从最早的 ListView、GridView到现在最新的 RecyclerView 都需要使用 Adapter,并且在开发中我们遇到的优化问题、出错概率较大的地方也基本都出自 Adapter,这是个让人又爱又恨的角色。 说到底,适配器是将两个不兼容的类融合在一起,它有点向粘合剂,将不同的东西通

2016-11-03 15:58:23 584

原创 Java设计模式之——观察者模式

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

2016-11-03 14:30:19 453

原创 Java设计模式之——桥接模式

桥接模式的简单介绍桥接模式也称为桥梁模式,是结构型设计模式之一。在现实生活中大家都知道“桥梁”是连接河道两岸的主要交通枢纽,简而言之其作用就是连接河的两边,而我们的桥接模式与现实中的情况很相似,也会承担这连接“两边”的作用,那么具体是哪两边呢?这里先不着急,我们先来看看该模式的定义。桥接模式的定义将抽象部分与实现部分分离,使它们都可以独立地进行变化。桥接模式的使用场景从模式的定义中我们大致可以了解到

2016-11-02 21:45:02 598

原创 Java设计模式之——外观模式

外观模式的简单介绍外观模式在开发过程中的运用频率非常高,尤其是在现阶段各种第三方 SDK 充斥在我们的周边,而这些 SDK 很大概率会使用外观模式。通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块、ImageLoader 模块等。可能你已经在开发中运用过无数

2016-11-02 20:47:55 766

原创 Java设计模式之——享元模式

享元模式简单介绍享元模式是对象池的一种实现,代表轻量级的意思。享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享、避免创建过多的对象的效果,这样一来就可以提升性能、避免内存移除等。享元对象中的部分状态是可以共享,可以共享的状态称为内部状态,内部状态不会随着环境变化;不可共享的状态则称之为外部状态,它们会随着环境的改变而改变。在享元模式中会建立一个

2016-11-02 15:50:14 536

原创 Java设计模式之——装饰模式

装饰模式简单介绍装饰模式也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。在现实生活中你也可以看见很多装饰模式的例子,或者可以大胆地说装饰模式无处不在,就拿人来说,人需要各式各样的衣着,不管你穿着怎样,但是,对于个人的本身来说是不变的,充其量只是在外面披上一层遮羞物,这就是装饰模式,装饰物也行各不相同但是装饰的对象本质是不变

2016-11-02 14:41:50 474

原创 Java设计模式之——组合模式

组合模式简单介绍组合模式也称为部分整体模式,结构型设计模式之一,组合模式比较简单,它将一组相似的对象看做一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。生活中一个比较典型的例子就是组织结构的树状图,如下所示:上面是一个公司的组织结构树状图,其中总公司下有行政部和研发部,而且总公司下属还有一个子公司,虽然子公司也包含行政部和研发部

2016-11-01 16:56:25 516

原创 Java设计模式之——模板方法模式

模板方法模式简单介绍在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说某些步骤的实现是会随着环境的变化而改变的,例如,执行程序的流程大致如下:(1) 检查代码的正确性(2)链接相关的类库(3)编译相关代码(4)执行程序对于不同的程序设计语言,上述 4 个步骤都是不一样的,但是,它们的执行流程是

2016-11-01 15:33:23 395

原创 Java设计模式之——迭代器模式

迭代器模式简单介绍迭代器模式又称为游标模式,是行为型设计模式之一。迭代器模式算是一个比较古老的设计模式,其源于对容器的访问,比如 Java 中的 List、Map、数组等,我们知道对容器对象的方法必然会涉及遍历算法,我们可以将遍历的算法封装在容器中,或者不提供遍历算法。如果我们将遍历的方法封装到容器中,那么对于容器类来说就承担了过多的功能,容器类不仅要维护自身内部的元素而且还要对外提供遍历的接口方法

2016-10-31 23:43:32 458

原创 Java设计模式之——命令模式

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

2016-10-31 22:32:53 616

原创 Java设计模式之——责任链模式

责任链模式简单介绍责任链模式,是行为性设计模式之一。什么是“链”?我们将多个节点首尾相连构成的模型称为链,比如生活中常见的锁链,就是由一个个圆角长方形的铁环串起来的结构。对于链式结构,每个节点都可以被拆开在连接,因此,链式结构也具有很好的灵活性。将这样一种结构应用于编程领域,将每一个节点看作是一个对象,每一个对象拥有不同的处理逻辑,将一个请求从链式的首端发出,沿着链的路径依次传递给每一个节点对象,直

2016-10-31 17:47:38 1030

原创 Java设计模式之——状态模式

状态方法模式简单介绍状态模式中的行为是由状态来决定的,不同的状态下有不同的行为。状态模式和策略模式的结构几乎完全一样,但它们的目的、本质却完全不一样。状态模式的行为是平行的、不可替换的,策略模式的行为是彼此独立、可相互替换的。用一句话来表述,状态模式把对象的行为包装在不同的状态对象里,每一个状态对象都有一个共同的抽象状态基类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模

2016-10-31 15:04:06 593

原创 Java设计模式之——策略模式

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

2016-10-30 14:49:22 733

原创 Java设计模式之——抽象工厂模式

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

2016-10-30 00:29:22 594

原创 Java设计模式之——工厂方法模式

工厂方法模式简单介绍工厂方法模式是创建型设计模式之一。工厂方法模式是一种结构简单的模式,其在我们平时开发中应用很广泛。如 Android 中的 Activity 里的各个生命周期方法,以 onCreate 方法为例,它就可以看作是一个工厂方法,我们在其中可以构造我们的 View 并通过 setContentView 返回给 framework 处理等。工厂方法模式的定义定义一个用于创建对象的接口,让

2016-10-29 22:20:44 1573

原创 Java设计模式之——备忘录模式

备忘录模式简单介绍备忘录模式是一种行为模式,该模式用于保存对象当前的状态,并且在之后可以再次恢复到此状态,这有点像我们平时说的“后悔药”。备忘录模式实现的方式需要保证被保存的对象状态不嗯呢该被对象从外部访问,目的是为了保护号被保存的这些对象状态的完整性以及内部实现不向外暴露。备忘录模式的定义在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存

2016-10-29 19:46:35 501

原创 Java设计模式之——原型模式

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

2016-10-29 15:56:06 626

原创 Java设计模式之——Builder 模式

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

2016-10-28 17:50:08 457

原创 Java设计模式之——单例模式

单例模式基本介绍单例模式是所有工程师最熟悉的设计模式之一,也是在开发中用的最多的。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。比如我们在上篇博客中自定义的 ImageLoader,它就应该只有一个 ImageLoader 实例,因为这个 ImageLoader 中含有线程池、缓存系统、网络请求等,很消耗资源,因此没

2016-10-28 15:32:47 638

原创 Java设计模式之——面向对象六大原则

设计模式六大原则(1):单一职责原则设计模式六大原则(2):开闭原则设计模式六大原则(3):里氏替换原则设计模式六大原则(4):依赖倒置原则设计模式六大原则(5):接口隔离原则设计模式六大原则(6):迪米特原则设计模式六大原则(1):单一职责原则单一职责原则的英文名称是 Single Responsibility Principle,缩写为 SRP。SRP 的定义是:就一个类而言,应该仅有一个引起它

2016-10-27 20:51:45 1936

原创 Android——性能优化

主要介绍内容:布局优化内存优化常用的一些优化工具布局优化系统在渲染 UI 界面的时候将消耗大量的资源,一个好的 UI 不仅应该具有良好的视觉效果,更应该具有良好的使用体验,因此布局优化就显得非常重要。第 1 招:Android UI 渲染机制人眼所感觉的流畅画面,需要画面的帧数达到 40帧每秒到 60帧 每秒,对于玩过 PC 游戏的朋友应该对 帧数 的概念比较清楚,最佳 fps 大概在 60

2016-10-24 22:11:47 797

原创 Android——自定义简化版ImageLoader

在上一篇我们已经先后介绍了 Bitmap 的高效加载方式、LruCache 以及 DiskLruCache,那么我们就动手来写一个简化版的 ImageLoader 吧!!!一般来说,一个优秀的 ImageLoader 应该具备如下功能:图片的同步加载图片的异步加载图片的压缩内存缓存磁盘缓存网络拉取声明一下,这里实现的 ImageLoader 并不是为了写一个框架,而是纯粹的加深下三级缓

2016-10-20 23:56:35 863

原创 Android——Bitmap的加载和Cache

主要介绍内容:Bitmap的高效加载Android 中的缓存策略 LruCacheDiskLruCache自定义 ImageLoader 自定义 ImageLoader 的使用Bitmap 的高效加载如何有效地加载一个 Bitmap,这是一个很有意义的话题,由于 Bitmap 的特殊性以及 Android 对单个应用所施加的内存限制,比如 16MB,这导致加载 Bitmap 的时候很容

2016-10-19 17:25:36 1277

自定义简单版ImageLoader实现三级缓存

自定义简单版ImageLoader 实现三级缓存,主要用到了 LruCache 以及 DiskLruCache 和线程池

2016-10-20

StickLayout.zip 源码

自定义滑动隐藏/显示Header 上滑自动隐藏 Header,下滑自动显示 Header 详情请见:http://blog.csdn.net/akaic/article/details/52713687

2016-10-01

HorizontalScrollViewEx.zip

自定义 ViewPager 详细请见 http://blog.csdn.net/akaic/article/details/52713687 详细介绍了 滑动冲突的解决以及常见的滑动冲突

2016-10-01

空空如也

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

TA关注的人

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