![](https://img-blog.csdnimg.cn/2019101601043937.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android毕业前的笔记
Android毕业前的笔记
我的镜子
Hello 我
展开
-
Android动画基础点记录
补间动画只能改变view的显示,不能改变view的响应位置属性动画只要对象有属性就行,也就是有get/set方法时间插值器:根据时间流失的百分比计算动画进度百分比,定义动画的改变速率、变化规则类型估值器:根据值变化的百分比计算改变后的属性值各自作用?通过补间动画(Tween animation)为Activity自定义切换动画Android系统为Activity设置了默认的切换动画,这...原创 2019-10-25 00:11:33 · 650 阅读 · 0 评论 -
Android自定义View简述
文章目录onMeasureonDraw自定义ViewGroup组合型自定义ViewonMeasure通过xml的layout_width/height指定自定义View的大小时,可以通过onMeasure指定View对于固定值、wrap_content、match_parent三种模式下的对应策略。protected void onMeasure(int widthMeasureSpec, ...原创 2019-10-21 00:30:54 · 250 阅读 · 0 评论 -
Android传统布局
摘抄自https://www.jianshu.com/p/4fac6304d872,选取部分觉得需要记录的内容文章目录RelativeLayoutSelectorShapeRelativeLayout基本属性Selector通过设置选择器(selector)可使控件 在不同操作下(默认、点击等) 显示不同样式。Shape作用:设置布局的颜色、边框线demo:<sha...原创 2019-10-16 23:39:56 · 154 阅读 · 0 评论 -
Android四大组件
摘抄自https://www.jianshu.com/p/51aaa65d5d25,只选取部分觉得需要记录一下的内容,用于查阅Activity生命周期图:onPause()执行相关表示activity正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新activity的显示,onPause必须先执行完,新的activity的onResume才会执行。当...原创 2019-10-16 23:14:21 · 237 阅读 · 0 评论 -
Android图片相关的工具类
Android图片相关的工具类目前有:打水印,单位转化,大小压缩,质量压缩public class ImageTool { /** * 打水印 * @param src * @param watermark * @param paddingLeft * @param paddingTop * @return ...原创 2018-03-18 15:21:14 · 419 阅读 · 0 评论 -
Android的一些小问题处理
有些小问题的处理方式(会持续地积累更新):软键盘挤压组件: 对活动添加如下属性 android:windowSoftInputMode=”adjustPan”对于高版本的Android系统调用系统相机报错: 创建一个继承Application的类,在onCreate方法中添加如下代码StrictMode.VmPolicy.Builder builder = new StrictM...原创 2018-02-19 22:44:13 · 294 阅读 · 0 评论 -
算法(一)
插入排序归并排序分治法排序分治策略分治法求解具有最大和的子数组插入排序适用于少量元素的排序,思想和排序扑克牌一样:一张张地抽取,然后和手中已经排好序的最大的牌进行比较,大之则插入右边,小之则和它的前一张牌比较。 伪代码://[1,j-1]是手中牌,[j,A.length]是待插入的牌for j = 2 to A.length //从待插入的第二张开始,A[1]表示第一张已经抽在手中的牌原创 2017-10-11 15:50:28 · 193 阅读 · 0 评论 -
算法-计算时间复杂度
一、概念 时间复杂度是总运算次数表达式中受n的变化影响最大的那一项(不含系数) 比如:一般总运算次数表达式类似于这样: a*2^n+b*n^3+c*n^2+d*n*lg(n)+e*n+f a ! =0时,时间复杂度就是O(2^n); a=0,b<>0 =>O(n^3); a,b=0,c<>0 =>O(n^2)依此类推 eg: (1) for(i=1;i<=n;i++)转载 2017-10-10 17:55:31 · 1781 阅读 · 0 评论 -
网络复习-应用层(部分)
万维网WWW:并不是特殊的计算机网络,它是一个大规模的、联机式的信息储藏所,英文简称Web。万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。超文本:包含指向其他文档的链接的文本。超媒体:内容上不仅限于文本文档的文档。 万维网需要解决的4个问题: 1.怎样标志分布在整个因特网上的万维网文档? 2.用什么样的协议来实现万维网上的各种链接?原创 2017-10-09 19:41:11 · 312 阅读 · 0 评论 -
网络复习-运输层
网络复习-运输层网络复习-运输层UDP特点报文的首部格式TCPTCP的特点TCP可靠传输的工作原理停止等待协议ARQ连续ARQ协议TCP报文段的首部格式部分重要的TCP的流量控制TCP的拥塞控制慢开始和拥塞避免快重传快恢复TCP的运输连接管理三次握手第三次握手的必要四次挥手第四次挥手的必要网络层主要是主机到主机间的通信,而运输层是进程到进程间的通信。 复用:所有原创 2017-10-07 16:31:45 · 244 阅读 · 0 评论 -
网络复习-网络层
IP地址的编址方法的3个阶段分类的IP地址子网的划分无分类编址CIDR构成超网IP协议配套使用的3个协议: 地址解析协议ARP,用来得到指定的MAC地址 网际控制报文协议ICMP,是用于处理异常、差错的 网际组管理协议IGMP,是用于多播相关的中间设备: 物理层:转发器 数据链路层:网桥/桥接器(只是扩大网络,没有真正连接网络) 网络层:路由器 网络层以上:网关IP地址的编址原创 2017-10-04 16:13:45 · 284 阅读 · 0 评论 -
Android实现文字分享
字符串通配符%x$s 代表第几个位置的字符串 <string name="send_note">%1$s 分享了便签给你\n时间:%2$s \n内容:%3$s 。</string> <string name="send_note_subject">来自便签APP</string> <string name="send_note_choose">分享便签</string>使用时:原创 2017-09-21 16:19:40 · 595 阅读 · 0 评论 -
Android实现简单的闹钟
Android实现简单闹钟Android实现简单闹钟简单的时间格式转化日期选择时间选择确定时间后开启服务在服务里使用AlarmManager定时在AlarmManager里设置到点发送一条广播实现一个BroadcastReceiver接收到定点的广播后发送一条通知简单的时间格式转化 private static String midStr1 = ""; private原创 2017-09-21 15:06:33 · 14369 阅读 · 22 评论 -
Bitmap的高效加载
Bitmap在Android中指的的是一张图片,比如png、jpg等图片,通过BitmapFactory类的decodeFile、decodeResource、decodeStream和decodeByteArray方法可以分别从文件系统、资源、输入流、字节数组中加载出一个Bitmap对象,其中decodeFile和decodeResource是调用decodeStream实现的通过Bitma原创 2017-08-27 03:23:13 · 334 阅读 · 0 评论 -
Retrofit2与RxJava的使用
Retrofit:1. 解析Json结构2. 制作放置Json数据的类3. 定义网络请求接口4. 创建Retrofit实例(指定Url、Gson、RxJava)5. 创Retrofit实例建网络请求接口实例6. 用网络接口实例创建定义在接口里的回调类实例7. 用回调类实例实现异步或同步请求例子:接口原创 2017-08-16 20:23:52 · 278 阅读 · 0 评论 -
简单的动画制作
制作动画比较简单的就是使用ObjectAnimator类来制作,顾名思义,类的动画制作器,这个类特指View类及其子类,算是制作视图的动画类。 ObjectAnimator按照动画的动作有很多种类型,比如滑动动画float型的,属性变化型的int型的,具体的ObjectAnimator类型在创建实例时指定,比如: ObjectAnimator exampleAnimator =原创 2017-07-26 23:07:57 · 495 阅读 · 0 评论 -
简单的自定义view制作
Android的所有视图控件都是View的子类,制作自定义视图则一样需要继承自这个类。View本身是空白一片的,需要通过重写onDraw(Canvas)方法来画制。 继承自View后,就是一个可以用的视图了,那么就必须具备视图能被创建和引用的基本功能吧。视图可以在代码里被创建和引用,也可以在布局文件里被创建和引用,所以2个不同的构造函数是少不了的。 public原创 2017-07-26 22:19:37 · 170 阅读 · 0 评论 -
简述使用Messenger进行进程间的通信
使用Messenger进行通信:1.创建服务,并配置好过滤信息。2.创建服务信使和绑定功能: 创建服务信使Messenger。信使具有发送(send)客户端信息的功能,内部是把消息发给信使自己的回调接口(信使只负责收信发信,不参与处理),回调接口是在服务边自己完成内部实现的,具体的实现是在自己的handlMessage里获得自己send发送出去的客户端信息,然后可以对该信息(里面包原创 2017-07-15 20:03:58 · 194 阅读 · 0 评论 -
简述AIDL通信的使用
对于普通的服务和活动之间的通信,在服务的定义过程中,创建一个Binder类对象,然后对Binder对象封装一些自己定义的方法,然后在onBind方法中return这个Binder类对象(onBind定义的返回值是IBinder,Binder的父类),然后在menifest里注册服务,剩下的工作就差开启服务了。在需要开启服务的地方,需要创建一个ServiceConnection的对象,重写里面onS原创 2017-07-14 11:02:34 · 260 阅读 · 0 评论 -
Android将图片保存到本地文件
获取的文件位置获取内部文件也就是只能供自己使用的文件获取外部文件也就是可以供其他程序一起使用的文件为类的每个对象创建获取自己对应图片的文件名称的方法拍照获取的文件位置获取内部文件,也就是只能供自己使用的文件File getFilesDir() 获取/data/data/packagename/files目录FileInputStream openFileInput(String n原创 2017-09-21 22:49:02 · 3261 阅读 · 0 评论 -
RecyclerView实现长按、拖拉、滑动、选中、分割线
长按拖动侧滑选中下滑线一个可以参考一下的便签app还没完善全部功能长按RecyclerView没有提供监听点击事件的接口,没有mRecyclerView.setOn…,但是可以实现一个实现了RecyclerView.OnItemTouchListener接口的监听抽象类,然后调用RecyclerView的addOnItemTouchListener的方法给RecyclerView设置点击的原创 2017-09-21 14:12:07 · 1053 阅读 · 1 评论 -
简述MVC与MVP
MVC在android中的体现:视图View层——XML文件Model层——本地数据文件或网络获取的数据体、数据的处理Controller——Activity、Fragment由用户与view的交互开始,发送命令给Activity/fragment,Activity/fragment获取Model,进行业务逻辑,然后修改Model或者将Model设置给View MVP:原创 2017-09-07 15:46:40 · 207 阅读 · 0 评论 -
迭代器模式+代理模式和适配器模式的简述
迭代器模式(Iterator),又称为游标模式(Cursor)产生背景:容器用来存放数据,当用户需要遍历里面的数据时,如果将遍历算法放置在容器内部,那么会使容器承担太多东西,而如果选择让用户自己实现遍历算法,那么又会暴露容器的内部细节,所以创建一个迭代器,将遍历算法放置到迭代器里,然后在容器内部声明一个返回关于如何遍历自己的迭代器的方法供用户使用,这样就避免了上诉的2个问题了,迭代器也由此而生原创 2017-09-07 01:30:27 · 327 阅读 · 0 评论 -
观察者模式
常用在GUI系统和订阅——发布系统,最重要的作用就是解耦,即将观察者和被观察者解耦定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新适用场景:关联行为场景,需要注意的是,关联行为是可以拆分的,不是“组合”关系;事件多级出发场景;跨系统的消息交换场景,如消息队列、事件总线的处理机制。 4个角色:抽象被观察者(Obse原创 2017-09-06 23:45:30 · 168 阅读 · 0 评论 -
工厂模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪个类使用场景:在任何需要生成复杂对象的地方,使用new就可以完成创建的对象无需使用工厂模式工厂模式的四个角色:抽象工厂、具体工厂、抽象产品类、具体产品类在抽象工厂里定义生产方法,在具体工厂里定义具体要生产的产品 有时候可以利用反射机制和泛型简洁地来生产具体的产品对象,此时在抽象工厂里定义传入的参数为泛型的Class类,然后在具原创 2017-09-06 21:51:35 · 195 阅读 · 0 评论 -
内存缓存+磁盘缓存
磁盘缓存需要先引进一个文件:在java包中创建libcore.io包,然后把DiskLruCache.java文件放入(最后有这个文件的代码)内存缓存://内存缓存初始化 int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory /8 ;原创 2017-09-06 01:16:51 · 2497 阅读 · 0 评论 -
侧边栏导航布局的实现
代码:/** * Created on 2017/8/4. * 继承自View的自定义View,SideBar * 主要实现3个方面: * 1.重写Draw方法,定制如何去画出字母表 * 2.重写dispatchTouchEvent方法,定制在接收到不同的事件时,如何去做UI响应 * 3.设置接口,用于实现外部RecyclerView的响应 */public class Si原创 2017-09-06 00:50:19 · 2904 阅读 · 0 评论 -
带清除空能和匹配功能的自定义EditText
代码:/** * Created on 2017/8/8. * 继承自EditText的自定义view * 主要完成2件事情:1.输入内容时,显示清除图标 * 2.当点击了清除图标时,清除EditText里的内容 */public class ClearEditText extends AppCompatEditText implements原创 2017-09-06 00:42:43 · 224 阅读 · 0 评论 -
程序的可维护性和可扩展性
可维护性是指当需要修改程序的某个模块时,对其他模块的影响和修改的代价;可扩展性是指当需要为程序添加新的功能时,对其他模块的影响和添加的代价,可以从下面几个方面提高程序的可维护性和可扩展性 代码风格:1. 命名规范命名要能传递出变量或者方法的含义,少用缩写私有成员以m开头,静态成员以s开头,常量用大写字母等2. 代码排版留出合理的空白空间来区分不同的代码块原创 2017-08-27 02:13:00 · 32517 阅读 · 0 评论 -
Android性能优化
OOM和ANR的区别:OOM是指内存溢出,是由于过多地使用内存导致的;而ANR是指程序无法响应了,一般是由于过多地使用CPU资源(大量的耗时任务)导致的,Android规定,当Activity在5秒之内无法响应屏幕触摸事件或者键盘输入事件就会出现ANR,而BroadcastReceiver如果在10秒之内还没执行完操作也会出现ANR性能优化1. 布局优化思想1:尽量减少布局原创 2017-08-27 01:53:11 · 233 阅读 · 0 评论 -
一些综合技术简述
捕获异常1. 实现一个UncaughtExceptionHandler对象2. 在它的uncaughtException方法中获取异常消息3. 将消息储存在SD卡中或者上传服务器4. 调用Thread的setDefaultUncaughtExceptionHandler方法,将这个UncaughtExceptionHandler对象设置为默认的异常处原创 2017-08-24 15:49:03 · 211 阅读 · 0 评论 -
动画
View动画View动画的对象是view,支持4种动画效果,在xml里分别对应四个标签xml文件的基元素为标签,有interpolator等属性来设置动画其他一些常用属性,比如duration、fillAfter使用方法:1.在res文件下创建anim文件2.在里面创建动画xml文件3.在里指定动画4.在代码里使用AnimationUtils.loadAnimati原创 2017-08-24 10:59:52 · 213 阅读 · 0 评论 -
PendingIntent
PendingIntent是待延迟的intent通过getXX 活动/服务/广播(context,requestCode,intent,flag)来创建PendingIntent相同时,是指requestCode和intent相同而intent相同指ComponentName(显示制定的部件)和intent-fliter相同 PendingIntent的4个标志原创 2017-08-23 15:33:36 · 218 阅读 · 0 评论 -
View的工作原理
ViewRoot:ViewRoot应用于ViewRootImpl类,它是连接WindowManager和DecorView的枢纽,View的三大流程都是通过ViewRoot来完成的三大流程:测量measure、布局layout、draw绘制从ViewRoot的performTraversals方法开始的,经过3大流程将一个view绘制出来顶级view--DecorV原创 2017-08-21 02:04:07 · 338 阅读 · 0 评论 -
滑动冲突解决
滑动冲突的场景:1. 不同方向的冲突2. 同一方向的冲突3. 1和2的混合冲突 使用定义的处理规则来决定滑动效果,比如对于1,可以用x/y上滑动的具体差来决定,或者2者之间的角度来决定,甚至是滑动速度;对于2,可以用判断子view是否到顶来决定是否触发父view的滑动,或者根据点击事件所坐落的坐标值区域来决定解决滑动冲突的2种方法:外部拦截法:也原创 2017-08-20 15:12:44 · 365 阅读 · 0 评论 -
Android中的线程和线程池
主线程的作用是运行四大组件:活动、服务、广播、内容提供器,以及它们和用户的交互,子线程主要是执行耗时操作,子线程也叫做工作线程1.AsyncTask:AsyncTask是方便开发者在子线程中更新UI,内部是封装了线程池和HandlerAsyncTask是一个抽象的泛型类,它的三个参数,第一个是传递参数,第二个是进度的显示数据类型,第三个是后台任务执行完后传递给结果处理方法的;在不需原创 2017-08-20 03:30:09 · 248 阅读 · 0 评论 -
Android的消息机制
1.Handler的作用就是用来解决子线程中无法反问UI的矛盾的,因为UI控件不是线程安全的2.由3个角色组成来处理消息Message:消息处理者Handler、消息队列MessageQueue(其实内部是链表)、循环执行者Looper3.可以通过handler的send方法发送消息,它会使MessageQueue调用enqueueMessage的方法将消息放进队列里,然后用next方法读原创 2017-08-20 02:09:13 · 179 阅读 · 0 评论 -
View的事件分发机制
事件分发机制,是指整个系统对于MotionEvent产生后,对MotionEvent由上自下地分发方式,说简单点,就是当一个点击事件发生后,视图层间要怎么来把它交给合适的视图去处理。 主要由三个每个view都有的方法来分发:dispatchTouchEvent(MotionEvent)、onInerceptTouchEvent(MotionEvent)、onTouchEvent(Moti原创 2017-07-30 15:58:24 · 194 阅读 · 0 评论 -
View的滑动的基本知识
让View进行普通滑动有3种方法:使用scrollTo/scrollBy、动画、改变View的LayoutParams 1.使用scrollTo/scrollBy 使用方法很简单,直接在view里调用该方法,然后传进目标位置的x和y,就完成了滑动。需要注意的是,这2个方法在内部是通过改变mScrollX/Y来完成的,而mScrollX/Y所指代的是view内容和view边缘之原创 2017-07-30 14:01:23 · 225 阅读 · 0 评论 -
view的基础知识
View的位置由4个参数决定,left、right、top、bottom,可以用下图来表明他们的含义: 这些数值都是相对于父容器而言的,不是屏幕。通过getLeft等方法可以获得这些值。 需要注意的是,这4个参数的值在视图被画制时就会固定不变,当它发生移动时,通过ranslationX/Y和x/y的值的改变来表示移动情况,这些值也是相对父容器而言的。通过getRaw原创 2017-07-30 13:25:57 · 261 阅读 · 0 评论