自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

论一个程序员的自我修养

不负韶华,砥砺前行!!!

  • 博客(70)
  • 资源 (2)
  • 收藏
  • 关注

原创 In FontFamilyFont, unable to find attribute android:font的报错处理

Information:Gradle tasks [:app:generateDebugSources, :app:mockableAndroidJar, :app:prepareDebugUnitTestDependencies, :app:generateDebugAndroidTestSources]Error:In <declare-styleable> FontFamily...

2018-07-20 13:53:18 1951

原创 Android Studio 项目导入的正确姿势

导入其他人的项目对于咱们开发人员来说是一个基础,可有些时候导入了10分钟20分钟甚至更久死活一直导不进来。这里就教大家一个轻松便捷的导入方法,顺便跟大家探讨一下导入程序的正确姿势。第一步,首先查看根目录的build.gradle文件拿到项目之后先不着急打开导入,咱们先查看一下根目录的build.gradle文件查看。 1. classpath ‘com.android.too...

2018-07-20 11:46:57 561

原创 Android自定义View之钟表绘制

Android自定义View之钟表绘制 自定义view一直是Android进阶路上的一块石头,跨过去就是垫脚石,跨不过去就是绊脚石。作为一个攻城狮,怎么能被他绊倒,一定要跟它死磕到底,这段时间看到自定义View新手实战-一步步实现精美的钟表界面特别漂亮,咱们也来手撸一个。先看下效果图 咱们先写一个类WatchBoard继承View,并重写他的构造方法public class...

2018-07-13 15:36:06 5393 4

原创 [问题解决]Android中getDrawable和getColor过时的替代方法

Android SDK 升级到 23 之后,用getDrawable()和getColor()方法就过时了,只不过当时没在意,而且也能正常运行,没报错就用。不过每天看着一条横线很不舒服,特此寻提替代方法。症状网上给的方案:谷歌推荐:

2017-09-22 11:32:50 1098

原创 Glide与CircleImageView加载圆形图片的问题

最近在项目中遇到了一个奇怪的问题,Glide和CircleImageView一起使用加载圆形头像,发现第一次死活都加载出来,出来的是一张占位图,当你刷新的时候或者第二次进入的时候才能加载出来。究其原因,CircleImageView 把位置占了。这时候我们有如下4种解决方案,不管是哪一种都是可以解决的(亲测可行)。1. 不使用占位符注释掉这两句代码即可。 .placeholder(R.

2017-09-05 18:48:01 635

原创 Android性能优化之电量优化

很多朋友都抱怨Android机电量不行,没有iPhone的耐用,问我怎么解决。我首先恭喜你们拥有一颗发现的眼睛,电量不耐用是Android的通病。明明电量是iPhone的几倍,但是可能还没有它耐用,为什么?究其原因,就是Android手机本身系统和ios的系统是不一样的(因为没有开发手机驱动的经验,所以粗略提一下带过)。作为一个Android开发人员,如果都能到更好的电量优化,相信你的手机电量会更加

2017-09-05 15:12:21 857

原创 基于开源项目搭建属于自己的技术堆栈

在技术面试的时候肯定都会问到使用了哪些第三方框架,为什么使用它而不用其他的。身边朋友就有这样的亲身经历: 面试官:你们项目中加载图片都是用的什么框架? 面试者:Glide啊(内心窃喜) 面试官:为什么使用Glide而不用其他的? 面试者:(沉默10s),Glide好啊,我比较喜欢。(内心不安) 面试官:……(能不能好好聊天了)这篇博文主要就是针对平常使用到的框架做

2017-08-31 15:56:01 1955

原创 Android性能优化之图片优化

图片的加载和显示是每个APP都避免不了的问题,再了解Android中如何图片优化之前,先看一下Android系统支持的图片格式。1. 图片的格式目前移动端Android平台原生支持的图片格式主要有:JPEG、PNG、GIF、BMP、和WebP(自从Android 4.0开始支持),但是在Android应用开发中能够使用的编解码格式只有三种:JPEG、PNG、WebP,图片格式可以通过查看Bitma

2017-08-28 12:04:32 1894

原创 Android性能优化之代码优化

作为一个Android程序员,代码优化是最基本的能力。根据Android官方的建议,编写高效的代码的两个基本准则是: 不要做冗余的工作 尽量避免次数过多的内存分配操作 这里还有还有第三个准则:深入的理解所用语言特性和系统平台的API,具体到Android开发,就是要熟练掌握Java语言,并对Android SDK所提供的API了如指掌。1. 数据结构的选择正确的

2017-08-25 15:57:29 814

原创 商城购物车加减控件的简单封装(续),解决ListView中数据错乱的问题

在上一篇文章中,我们学习了商城购物车加减控件的简单封装,知道了封装的思路过程和使用方法。还没有看过上一篇文章的朋友,建议先去阅读 商城购物车加减控件的简单封装 。这段时间收到一些小伙伴的反馈,在ListView或者是RecyclerView中存在item复用导致数据错乱的问题,这篇文章就重点解决item复用导致数据错乱的问题和在ListView或者RecyclerView中的用法。下面为了方便我们

2017-08-17 17:39:01 1694 2

原创 Android6.0运行时权限

Android6.0系统中引用了运行时权限功能,从而更好的保护了用户的安全和隐私。哪些是Android列出的危险权限 权限组名 权限名 CALENDAR READ_CALENDAR / WRITE_CALENDAR CAMERA CAMERA CONTACTS READ_CONTACTS / WRITE_CONTACTS / GET_LOCATION LOCATI

2017-08-16 00:24:21 421

原创 商城购物车加减控件的简单封装

我们都知道,购物车是做商城项目必不可少的一个环节,购物车中的加减控件就是商城中的重中之重,最近项目中也用到了加减控件,但是使用起来样式不能随便更改,决定简单封装一下,以后用到的时候就不那么麻烦了,几行代码就搞定。本文主要是对封装的过程进行一下整理。1. 先看下效果图效果图:Github地址:AddSubUtils同步掘金和简书:掘金地址:商城购物车加减控件的简单封装 简书地址:商城购物车加减控件

2017-08-14 16:15:50 3285 3

原创 Kotlin应用于项目踩过的坑

在谷歌宣布Kotlin成为一级开发语言的时候就开始学习kotlin,现在已经在项目中开发使用了。我目前负责的项目老代码全是java,我不可能全转成kotlin,所以即便使用了kotlin,也只是在新建文件的代码里使用,老代码继续用java。kotlin的好处就是完全兼容java,java调用kotlin,kotlin基本上无阻碍。官网的话就是java和kotlin 100%兼容。为什么使用Kotl

2017-08-09 17:45:13 5659 1

原创 Kotlin中val和var的区别

变量可以很简单地定义成可变(var)和不可变(val)的变量。这个与Java中使用的final很相似。但是不可变在Kotlin(和其它很多现代语言)中是一个很重要的概念。一个不可变对象意味着它在实例化之后就不能再去改变它的状态了。如果你需要一个这个对象修改之后的版本,那就会再创建一个新的对象。这个让编程更加具有健壮性和预估性。在Java中,大部分的对象是可变的,那就意味着任何可以访问它这个对象的代码

2017-08-09 13:51:20 2755

原创 Kotlin编码规范

最近项目中开始慢慢使用Kotlin编写代码,对于一些规范还是必要地。 资料原文:http://www.kotlinlang.org/docs/reference/coding-conventions.html命名风格如果拿不准的时候,默认使用Java的编码规范,比如:使用驼峰法命名(并避免命名含有下划线)类型名以大写字母开头方法和属性以小写字母开头使用 4 个空格缩进公有函数应撰写

2017-08-09 11:48:39 571

转载 简析TCP的三次握手与四次挥手

TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型: 我们捡重点看几个:链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他

2017-08-02 18:18:58 818 2

原创 64K方法数限制解决办法

随着业务逻辑越来越多,业务模块也越来越大,不可避免会遇到64K方法数的限制。最直观的表现就是编译报错:较早版本的编译系统中,错误内容如下:Conversion to Dalvik format failed:Unable to execute dex: method ID not in [0, 0xffff]: 65536较新版本的编译系统中,错误内容如下:trouble writing outp

2017-07-27 16:26:49 1985

原创 书写简洁规范的代码

写出简洁规范的代码对于开发者而言非常重要,它体现了开发者自己的专业性和技术水平,而且能够赢得别人的赞赏。对团队来说,团队成员遵循统一的代码规范,能够更好地维护代码库的稳定和谐。Android是基于Java语言进行开发的,因此说到编码规范,首先需要遵循Java的编码规范。 - 1 Java编码规范1.1 源代码文件的定义源代码文件以文件内容中的最顶层的Java类命名,而且大小写敏感,文件扩展名为 .

2017-07-21 18:18:07 9076 1

原创 Android数据序列化方案研究

数据的序列化在Android开发中占据着重要的地位,无论是在进程间通信、本地数据存储又或者是网络数据传输都离不开序列化的支持。而针对不同场景选择合适的序列化方案对于应用的性能有着极大的影响。 广义上讲,序列化是将数据结构或者对象转换成可用于存储或者传输的数据格式的过程,在序列化期间,数据结构或者对象将其状态信息写入到临时或者持久性存储区中;反序列化是将序列化过程中生成的数据还原成数据结构或者对

2017-07-12 14:48:06 1430

原创 Android异步处理技术

《Android 高级进阶》读书笔记 Android中,异步处理技术有很多种,常见的有Thread、AsyncTask、Handler&Looper、Executors等,在实际项目中,我们需要根据具体业务需求进行选择、一个完整的异步处理技术继承树如下:1. Thread线程是Java语言的一个概念,它是实际执行任务的基本单元,创建线程有两种方法。继承Thread类并重写run方法,语句如

2017-07-11 18:14:39 552

原创 ANR产生的原因及定位分析

ANR全称是Application Not Responding,意思是应用程序无响应。相信从事Android开发的肯定遇到过。ANR的直观体验是用户在操作App的过程中,感觉界面卡顿,当界面卡顿超过一定时间(一般5秒),就会出现ANR对话框。ANR对于一个应用来说是不能承受之痛,其影响并不比应用发生Crash小。ANR产生的原因只有当应用程序的UI线程响应超时才会引起ANR,超时产生原因一般有两

2017-07-10 15:33:45 2501

原创 注解在Android中的应用

《Android 高级进阶》读书笔记 Android 开发中在很多地方都用到了注解,注解在Android中的作用不可谓不大。Android Support Library甚至专门推出了一个支持库Support Annotation,之前的一篇文章Android进阶Support Annotation Library 使用详解 ,基本把注解说的差不多了,这次咱们整体的说下注解。那什么是注解呢?

2017-07-07 16:12:17 682

原创 Gradle在Android Studio中的应用技巧

Gradle是Android Studio标配的构建系统,想要熟练使用Android Studio进行Android开发,必须对Gradle有一定程度的认知。这里主要是说一下关于Gradle的使用技巧共享变量的定义Gradle开发中会涉及到很多配置,比如不同module中都要配置compileSdkVersion、buildToolsVersion等变量值,我们把这些公共的配置项称为共享变量。一般

2017-07-06 14:50:33 445

原创 Android Studio中的NDK开发

读书笔记:《Android 高级进阶》NDK简介 NDK 是 Native Developmentit的缩写,是Google在Android开发中提供的一套用于快速创建native工程的一个工具。 使用这个工具可以很方便的编写和调试JNI的代码。NDK是一系列工具的集合 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这

2017-07-04 14:29:32 555

原创 Android Design Support Library使用详解(二)

上一篇文章咱们已经学习了Snackbar,TextInputLayout、TabLayout、NavigationView、FloatingActionButton这四个MD新特性布局。如果还没有看的请先看下Android Design Support Library使用详解(一),前面几个比较简单一点。废话不多说,咱们接着看MD新特性的其他控件。CoordinatorLayoutCoordina

2017-07-03 17:00:53 4813

原创 Android Design Support Library使用详解(一)

这里写链接内容> Design Support Library是在Google I/O 2015上发布的一个全新兼容函数库,它使得开发者可以在Android2.1(API = 7)及以上的设备中实现Material Design效果,这个函数库提供了一系列的控件,主要包括:Snackbar,Navigation View、FloatActionButton、CoordinatorLayout、Col

2017-06-30 16:35:21 1326

原创 PX、DP和SP之间的换算

在Android开发中,尺寸换算可以说既简单又复杂,而且还比较碎,特别是屏幕适配的时候肯定会用到他们。今天就来总结一下他们三者的关系,首先说下他们都是什么。px:像素单位。最基础的图像构成元素单位 dp:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。 这里要解释一下密度的概念,密度(dpi):每英寸包含的像素个数(单位是dpi),1dp实际上相当于密度为160dpi的屏上的一个点。可否理

2017-06-29 18:22:41 1592

原创 Android进阶Support Annotation Library 使用详解

Support Annotation Library是从Android Support Library 19.1 开始引入的一个全新的函数包,它包含一系列有用的元注解,用来帮助开发者在编译期间发现可能存在的Bug。Support Library本身也使用Annotation Library 提供的注解来完善自身的代码质量,Android Studio 提供可视化的交互以便开发者发现问题。Andro

2017-06-29 15:04:27 3438 1

原创 Android动画机制完全解析

在Android 3.0之前的版本,我们能使用的动画类型有两种,分别是逐帧动画和补间动画;在Android3.0发布时,Android SDK又为开发者带来了更加强大灵活的属性动画,使得实现复杂的动画效果更加容易;随着时间的推进,在Android4.4中,Android SDK又为开发者带来了android.transition框架,这使得开发者可以通过一种更直观的方式定义动画效果。咱们分别来介绍下

2017-06-28 17:28:07 1044

原创 Android View的绘制流程

View的绘制和事件处理是两个重要的主题, 之前说过View的事件分发处理机制,如果还不太清楚的同学可以先看一下Android Touch事件的传递机制,这里不再多说了。对于一些系统自带控件实现不了的功能,就需要我们自己去自己绘制,前提是你需要熟练掌握View的绘制流程。1 在正式说View的绘制流程之前,先了解一下Android的UI管理系统的层级关系。尊重作者 android的窗口机制分析——

2017-06-27 16:32:35 2237 2

原创 MVP应用架构模式

MVP全称是Model View Presenter ,MVP模式可以分离显示层和逻辑层,他们之间通过接口进行通信,降低耦合。在android中,业务逻辑和数据存取是紧紧耦合的,很多缺乏经验的开发者很可能会将各种各样的业务逻辑塞进某个Activity、Fragment或者自定义View中,这样会使得这些组件的单个类型臃肿不堪。如果不将具体的业务逻辑抽离出来,当UI变化时,你就需要去原来的View中

2017-06-26 15:33:43 802

原创 MVC的介绍与实战

MVC的基本简介MVC全称是Model - View - Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC是一种框架模式而非设计模式,GOF把MVC看作是3种设计模式:观察者模式、策略模式与组合模式的合体,而核心是观察者模式。简而言之,框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度

2017-06-22 18:11:06 426

原创 23种设计模式之桥接模式

桥接模式也称为桥梁模式,是结构型设计模式之一。现实生活中桥梁大家肯定知道,是连接河岸两侧的重要枢纽,至于桥接模式跟它很类似。桥接模式的定义 将抽象部分与实现部分分离,使它们都可以独立地进行变化。桥接模式的使用场景 1.如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。 2.设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改

2017-06-22 17:45:53 760

原创 23种设计模式之外观模式

外观模式在开发过程中的运用频率非常高,通过一个外观类使得整个系统的接口只有一个统一的高层接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节。外观模式的定义 要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。外观模式的使用场景为一个复杂子系统提供一个简单接口。当你需要构建一个层次结构的子系统时,使用Facade模式定义了

2017-06-21 16:09:43 567

原创 23种设计模式之享元模式

享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样就可以提升性能、避免内存溢出等。 享元对象中的部分状态是可以共享的,可以共享的状态称为内部状态,内部状态不会随着环境变化,不可共享的状态则称为外部状态,它们会随着环境的改变而改变。享元模式定义 使用共享对象可有效地支持大量的细粒度的对象使

2017-06-20 14:19:56 401

原创 23种设计模式之装饰模式

装饰模式也称为包装模式,结构型设计模式之一,其使用一种对客户端透明的方式来动态地扩展对象的功能,同时它也是继承关系的一种替代方案之一。装饰模式的定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活装饰模式的使用场景 需要透明且动态地扩展类的功能时装饰模式的UML类图角色介绍:抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。具

2017-06-16 13:56:48 414

原创 23种设计模式之适配器模式

适配器模式在我们的开发中使用率极高,代码中随处可见。像ListView 、GridView 、RecyclerView等都使用了Adapter。一般优化也会是对它的优化。适配器模式的定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式的使用场景 1. 系统需要使用现有的类,而此类的接口不符合系统的需求,即接口不兼

2017-06-15 16:18:08 390

原创 23中设计模式之组合模式

组合模式也称为部分整体模式,结构型设计模式之一,组合模式比较简单,它将一组相似的对象看作一个对象处理,并根据一个树状结构来组合对象,然后提供一个统一的方法去访问相应的对象,以此忽略掉对象与对象集合之间的差别。组合模式的定义 将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。使用场景 表示对象的部分-整体层次结构时 从一个整体中能够独立出部分模块

2017-06-14 18:10:27 348

原创 Android 7.0 更新APK在安装时的报错 android.os.FileUriExposedException解决办法

1、在AndroidManifest.xml中添加如下代码<provider android:name="android.support.v4.content.FileProvider" android:authorities="app的包名.fileProvider" android:grantUriPermiss

2017-06-14 15:11:26 1253

原创 Android Touch事件的传递机制

android中会经常遇到多个View ViewGroup嵌套的问题,如果想要快速的解决这种问题,就需要对View的事件传递有较深入的理解。一次完整的事件传递机制,主要是三个阶段,分别是事件的分发,拦截和消费。1.1 触摸事件的主要类型 触摸事件对应的是MotionEvent类,事件的类型主要有如下三种。ACTION_DOWN:用户手指按下的操作,一个按下操作标志着一次触摸事件的开始。ACT

2017-06-14 14:20:38 1162 4

AddSubUtils

对购物车加减按钮的简单封装,几行代码就搞定,采用链式调用,而且样式支持自定义

2017-08-14

ProgressBar字体随着进度条的加载而滚动

应大家的需求,这里放上ProgressBar字体随着进度条的加载而滚动对应的demo源码,有写的不好或者不对的地方欢迎留言

2017-07-03

空空如也

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

TA关注的人

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