自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小迈的博客

我的博客

  • 博客(38)
  • 资源 (3)
  • 收藏
  • 关注

原创 Environment Switcher 原理解析(注解、Apt、反射、混淆)

Environment Switcher 是一个在 Android 的开发和测试阶段,运用 Java 注解、APT、反射、混淆等原理来一键切换环境的工具。本周末随着 Environment Switcher 1.4 的发布,在这里为大家奉上 Environment Switcher 的原理解析。如果你还不了解 Environment Switcher,建议先看一下这篇文章《一键切换...

2018-09-03 10:59:23 734

原创 一键切换Android应用环境(Environment Switcher)

Environment SwitcherEnvironment Switcher 是一个在 Android 的开发和测试阶段,用来一键切换环境的工具。为什么要做这个工具做这个工具是为了方便开发和测试人员在不重新打包的情况下快速切换环境。相信大家都遇到过下面的某些场景。App 在开发、测试、上线等阶段需要频繁切换环境。同一个App中的不同模块,在同一阶段需要配置不同的...

2018-08-25 19:32:20 2727

原创 一款开源的Android极客应用(持续更新)

转载请注明出处: http://www.jianshu.com/p/1abf8f86ad16Android极客 “Android极客”一个专门为Android程序猿打造的极客应用(未完待续….),你们的支持是我最大的动力!!!!更新预告优化GitHub模块的一些细节加入Android进阶文章精选干货(大家可以把想学习的关键技术提交issues或留言给我)以后新版本有哪些更新,你说的算

2017-05-08 14:58:41 1998

原创 2018 年度总结

时间真是个无情的东西,转眼间就要走到 2018 年的尽头,也恰逢在新公司工作一年了,借此机会做一下年度总结(扯扯淡)。从跳槽谈起很荣幸能够在 2017 年底从一个只有十几个人的小公司跳到了一个比它大 20 倍的公司。在新公司我经历很多之前没有经历过甚至可以说是享受过的福利。全额公积金

2018-12-18 22:13:38 1345

原创 程序猿必修课之数据结构(十)树1

上一章:程序猿必修课之数据结构(九)串 树是一对多的数据结构树的定义树(Tree)是 n (n ≥ 0)个结点的有限集。n = 0 时,称为空树。在任意一棵非空树中:有且仅有一个特定的根(root)结点。当 n > 1 时,其余结点可分为 m (m > 0) 个互不相交的有限集,其中每一个集合本身又是一棵树,并且称之为根的子树(SubTree)。...

2018-07-10 18:24:40 220

转载 自动装箱与拆箱(转载)

自动装箱和拆箱从 Java 1.5 开始引入,目的是将原始类型值自动地转换成对应的对象。自动装箱与拆箱的机制可以让我们在 Java 的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。

2017-12-28 19:27:58 430

翻译 ViewModel

ViewModel 负责根据生命周期来存储和管理 UI 相关(Activity 或 Fragment)的数据。当配置发生变化时,如:屏幕方向旋转,它可以保证数据不被销毁。

2017-12-25 12:33:22 4108

原创 Java 中的值传递

其实 Java 中是只存在值传递的,不存在引用传递。因为我们大多数人是从 C 语言入门,而 C 语言中是存在引用传递的,所以很容易在 Java 中混淆。

2017-11-17 13:59:44 851

原创 Handler 消息机制

Handler 消息机制是由 Message MessageQueue Handler Looper 共同完成的。Handler 消息机制是用于在同一个进程中的多个线程之间进行通信的。由于工作线程与主线程共享地址空间,即 Handler 实例对象 mHandler 位于线程间共享的内存堆上,工作线程与主线程都能直接使用该对象,只需要注意多线程的同步问题。

2017-11-13 14:38:27 364

原创 踢开Android 开发中的绊脚石

在开发过程中,许多并算不上高级技能甚至连基础知识都不算的东西经常被忽略,但这些东西还经常是开发过程中的绊脚石,很长时间都解决不了,一旦找到了解决办法,就茅塞顿开了“原来是这样啊,这不是小菜一碟吗?下次我注意就是了”。但是时间长了真的发现“好记性不如烂笔头”,当再次遇到同样的问题,发现还是一脸懵逼,但可以肯定之前遇到过这个问题。为了避免重走冤枉路,所以将它们记录下来。虚线Scroll...

2017-10-24 10:07:24 417

原创 Android应用屏幕适配

问题Android 设备各种屏幕尺寸和形状,如何做好适配?解决思路和办法Android 系统定义了两种常规属性对设备屏幕进行分类:大小和密度。为了优化应用程序的外观,以适应不同的屏幕尺寸和密度,可以添加一些替代资源(布局和图片)。因此对不同屏幕尺寸、形状以及密度的适配,其实就是对布局和图片的适配。布局适配要优化不同屏幕尺寸的用户体验,应该为要支持的每个屏幕尺寸

2017-09-30 15:06:17 432

原创 字符编码的历史演变

原文出处: http://www.jianshu.com/p/0f5fd93efc46因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制 11111111 = 十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是6553

2017-08-06 11:09:09 722

原创 站在 Java 的肩膀上学 Python (一)

开始学习 Python 前,我是有一定的 Java 基础的。写这篇文章的目的一方面是作为学习 Python 的笔记,另一方面对 Java 和 Python 进行对比,便于记忆。 我是跟着廖雪峰的Python教程学习的,所以笔记中有的东西是直接复制过来的。

2017-08-05 21:39:06 330

原创 Android 检测设备是否为模拟器

Android 检测设备是否为模拟器 最近有一个新的需求,检测设备是否为模拟器,如果是模拟器就禁用某些功能。市面上的模拟器打开 Google 搜索 “模拟器”,各种模拟器映入眼帘。“逍遥安卓-超强安卓模拟器”、“天天模拟器”、“网易MuMu”、“BlueStacks蓝叠安卓模拟器”、“夜神安卓模拟器”、“海马玩模拟器”、“51模拟器”当然还有功能强大的“Genymotion”……搜索解决办法经

2017-07-13 16:17:08 4977 2

原创 修改MP4 Parser 生成Jar包

转载请注明出处: http://www.jianshu.com/p/78f005e80d3b这篇文章不是对 MP4 Parser 怎样使用的介绍,而是记录下修改它的源码并生成 jar 包的过程。MP4 Parser 是什么 A Java API to read, write and create MP4 container. Manipulating containers is differe

2017-05-12 17:08:54 1849

原创 程序猿必修课之数据结构(八)队列

文本同步发布于简书:http://www.jianshu.com/p/5d020c00fcb8上一章:程序猿必修课之数据结构(七)栈2队列的定义队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队列的抽象数据类型队列是特殊的线性表,因此它的各种

2017-05-02 14:32:33 446

原创 程序猿必修课之数据结构(七)栈2

本文同步发表于:http://www.jianshu.com/p/5728607674e4上一章:程序猿必修课之数据结构(六)栈1栈的应用——递归斐波那契(Fibonacci)是一个经典的递归例子。斐波那契数列数字 1,1,2,3,5,8,13……构成一个序列,它的特点是:前面相邻两项之和是后一项的值。用数学函数来定义是:用递归实现打印出前 40 位的斐波那契数...

2017-04-27 18:08:21 267

原创 解析 SQLiteOpenHelper

“SQLiteOpenHelper” 是一个用来管理数据库的创建和版本管理的辅助类。它是一个抽象类,要使用它必须创建一个子类继承 SQLiteOpenHelper,并实现 onCreate,onUpgrade 这两个抽象方法。这样,如果数据库存在,它就会打开;如果不存在,就会创建这个数据库,并且如果必要的话会自动升级数据库。为了确保数据库始终处于一个合理的状态,它会使用事务。它便于 ContentP

2017-04-21 13:23:10 1948

原创 一款开源的密码管理器

本文同步发布于掘金:https://juejin.im/post/58f58d94da2f60005d434b66 简书:http://www.jianshu.com/p/08c8a0a7320e每个人都有各种各样的账号和密码,出于安全的原因,不建议所有平台使用同样的密码,一旦泄露后果不堪设想。但每个平台都设置不同的密码,如果你能全部记住,并且不记混,我只能说你不是地球人。实际上各种平台使用...

2017-04-18 14:17:42 1983

原创 程序猿必修课之数据结构(六)栈1

原文:http://www.jianshu.com/p/66da0b8935ac上一章:程序猿必修课之数据结构(五)线性表3栈的定义栈(Stack)是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称 LIFO 结构。从上面这两段话,可

2017-04-17 16:46:34 377

原创 程序猿必修课之数据结构(五)线性表3

原文:http://www.jianshu.com/p/082eb306d228上一章:程序猿必修课之数据结构(四)线性表2循环链表对于单链表,由于每个结点只存储了向后的指针,到了链表末尾就停止了向后链的操作,这样,结点就无法找到它的前驱结点了。将单链表中终端结点的指针域由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。循环链表和单链表的主要差异就在

2017-04-17 16:46:00 277

原创 程序猿必修课之数据结构(四)线性表2

原文出自:http://www.jianshu.com/p/94fc4be7d61e上一章:程序猿必修课之数据结构(三)线性表1上篇我们复习的线性表的顺序存储结构,它的最大缺点就是:插入和删除是需要移动大量元素,造成时间的浪费。导致这个问题的原因是,相邻两个元素的存储位置也具有邻居关系,也就是说它们在内存中是挨着的,中间没有空隙,当然就无法快速插入,而删除后,当中就会留出空隙,自然需要弥补。链式存储

2017-04-17 16:44:56 364

原创 程序猿必修课之数据结构(三)线性表1

原文出自:http://www.jianshu.com/p/5980a6755ab2上一章: 程序猿必修课之数据结构(二)算法和算法的复杂度线性表的定义线性表(List):零个或多个数据元素的有限序列。首先它是一个序列。也就是说,元素之间是有顺序的,若存在多个元素,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。其次,线性表强调是有限的。线性表元素的个数 n (n >=

2017-04-17 16:44:10 317

原创 程序猿必修课之数据结构(二)算法和算法的复杂度

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

2017-04-17 16:42:22 496

原创 程序猿必修课之数据结构(一)数据结构基本概念和术语

本文将“数据结构”分为 “数据” 和 “结构” 两部分。

2017-04-17 16:39:15 421

原创 Android 开发SD卡存储目录的使用

Android 开发SD卡存储目录的使用 最近两天产品收到用户反馈:“下载目录是否可以选择外置SD卡”,用户就是上帝啊,需要什么我们就要实现什么。但是,在真正的开发过程中遇到了不少问题,记下来做个前车之鉴。

2017-03-07 18:36:38 1374

原创 安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法

安卓开发中,release安装包安装后,打开app后再按home键,再次点击程序图标app再次重新启动的解决办法 在开发中我们一般都是直接AS上的安装(Run)按钮,直接安装到真机或模拟器上进行测试,但是当发布时就要先打包,再拷贝安装。如题目中的描述,这个问题在平时Debug的时候并不存在,只有发布正式版的时候才会出现,(尼玛,隐藏的挺深啊!可坑了我了!)开始发现这个问题,我以为是app被系统

2017-02-27 17:37:47 5494 4

原创 Linearlayout的android:divider属性

这个属性可以在LinearLayout的每个子布局直间添加一个“drawable”作为分割线,这个drawable必须有设定好的高度或者宽度,因此不能之间设置为“@color/….”这个属性要和android:showDividers一起使用才会生效android:showDividers有“begining”,“middle”,“end”,“none”四种值。默认值为“none”,即不显示分割

2016-12-27 13:59:22 13996

原创 打造一个具有弹性滑动效果的TextView

先看效果图实现步骤:自定义ScrollTextView继承TextView实现滑动的方法重写computeScroll()方法代码实现public class ScrollTextView extends TextView { private Context mContent; private Scroller mScroller; public ScrollTextVie

2016-12-16 14:44:16 723

原创 CircleTextView的实现

“CircleTextView”顾名思义就是带圆边框的TextView,先来看效果图:之前的项目中如果有带圆边框的需求,基本是都是在drawable中创建一个shape,然后将它设置为TextView的background,但是这样有个弊端,就是每次只要边框的颜色、边框的宽度或者填充颜色不同,就要创建一个新的shape文件,这样做显然不是一个有长久之计,想到CircleImageView的效果受到大

2016-12-06 14:55:30 1416

原创 自定义图片轮播(Banner)控件的实现解析

自定义图片轮播(Banner)控件的实现解析图片轮播控件,可以说是每个App基本上都会用到的。它可以用来动态的展示多个图片,之前写过两篇博客:实现ViewPager无限循环的方式一和实现ViewPager无限循环的方式二,在这两篇博客中,分析了两种实现ViewPager无限循环的原理,但是在使用的过程中,代码的解偶性很低,所以就使用自定义View的方式,实现无限循环的图片轮播的封装。我自定义的Ban

2016-11-16 18:35:03 3375 1

转载 Android Studio Gradle的配置使用与解析总结

Gradle 的编译周期在解析 Gradle 的编译过程之前我们需要理解在 Gradle 中非常重要的两个对象。Project和Task。每个项目的编译至少有一个 Project,一个 build.gradle就代表一个project,每个project里面包含了多个task,task 里面又包含很多action,action是一个代码块,里面包含了需要被执行的代码。 > 你还在...

2016-10-21 13:17:52 5433

原创 Android加载Gif动画android-gif-drawable的使用

Android加载Gif动画android-gif-drawable的使用概述:android-gif-drawable是通过JNI来渲染帧的,这种方式比使用WebView或者Movie效率要高要求Android 2.3+ (API level 9+)*如果使用GifTextureView, Android 4.0+ (API level 14+) ,支持硬件加速渲染如果使用GifTexI

2016-10-20 17:15:15 31425 8

原创 实现ViewPager无限循环的方式二

 原理:在Adapter中将getCount设置为无限大 package com.xiaomai.myproject.demo;import android.os.Bundle;import android.support.v4.view.ViewPager;import android.view.ViewGroup;import android.widget.Ima...

2016-10-10 17:07:59 1024

原创 实现ViewPager无限循环的方式一

方式一:实现原理: 假设有3张图片,分别是1,2,3,那么就创建5张图片,这5张图片的顺序为:3,1,2,3,1, 其中1,2,3为我们要实现滑动的图片,最左面的3和最右面的1是我们另外添加的图片, 开始时,显示图片1,当图片向左滑动依次为1,2,3,当从第3张图片继续向左滑动,会出现我们多添加 的图片1,这时,将当前的index设置为真正的图片1所在的位置。package com....

2016-10-10 16:58:27 1401 1

原创 图片加载库Android-Universal-Image-Loader关闭Log及源码分析

 > 你还在为开发中频繁切换环境打包而烦恼吗?快来试试 Environment Switcher 吧!使用它可以在app运行时一键切换环境,而且还支持其他贴心小功能,有了它妈妈再也不用担心频繁环境切换了。[https://github.com/CodeXiaoMai/EnvironmentSwitcher](https://github.com/CodeXiaoMai/Environment...

2016-01-17 16:19:46 996

原创 修改主题Theme中默认颜色

Android中的许多默认颜色的值是和Theme有关的,就拿超链接的颜色为例。当Theme为“Theme.AppCompat"和"android:Theme.Light"时,超链接的颜色是不一样的。所以,我们要自己配置。 <application .... android:theme="@style/AppTheme"></application&...

2015-08-20 18:06:25 4316

原创 scanner.next()与scanner.nextLine()的区别

1.next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串而

2015-08-20 18:03:22 3905

flux调节屏幕亮度的软件

flux调节屏幕亮度的软件

2016-10-21

7Zip-一款高效、轻巧的压缩软件

2016-10-21

一个简单的注册登陆java代码

一个简单的注册登陆java代码,包括注册、登陆、验证。密码重提输入,检测用户名是否有重名等

2015-09-23

空空如也

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

TA关注的人

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