- 博客(50)
- 收藏
- 关注
原创 安装虚拟机CentOS7以及搭建Rails开发环境
通过Vagrant安装Centos7具体参考以下博文:https://www.cnblogs.com/wzz2500/p/11434434.html关键步骤:1.去官网下载vagrant 和 virtualboxvagrant:https://www.vagrantup.com/downloads.htmlvirtualbox:https://www.virtualbox.org/wiki/Downloads2.切换到需要存放该实例的文件夹,呼出cmd> vagrant i
2021-03-09 18:41:52 313
原创 启动VirtualBox时,出现 Failed to open/create the internal network 问题
控制台内容Stderr: VBoxManage.exe: error: Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host-Only Ethernet Adapter #2' (VERR_INTNET_FLT_IF_NOT_FOUND).VBoxManage.exe: error: Failed to attach the network LUN (VERR_INTNET_FLT_IF_
2021-03-09 18:07:12 2063
原创 Android学习笔记之IntentService
IntentServiceIntentService 是一种特殊的Service,它是继承了Service的抽象类, 因此在使用它的时候,需要先创建它的子类。它通常用于执行一些高优先级的后台任务,并且当任务执行结束后它会自动停止。在实现上,它封装了 HandlerThread 和 Handler。HandlerThread它是Thread的子类,是一种可以使用Handler的Thre...
2018-12-07 19:35:04 284
原创 如何正确获取控件宽高
问题出现的场景:在 Activity 的 onCreate() 方法中给 ImageView 设置图片后,通过日志获取它的测量宽高,发现显示为0.private void bitmapReset(){ mBitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(),R.drawable...
2018-11-23 20:22:58 502
原创 Android学习笔记之动画(二)——属性动画
属性动画属性动画是从Android 3.0 开始引入的新特性,和View动画不同,它可以对任何对象做动画,甚至可以没有对象(ValueAnimator)除此之外,属性动画通过ValueAnimator、ObjectAnimator和AnimatorSet 等概念,可以实现比View动画要丰富得多的动画效果。在Android 3.0之前的版本可以采用开源动画库nineoldandroids来...
2018-11-19 20:21:21 308
原创 Android学习笔记之动画(一)——View动画
一、动画的分类Android 的动画可以大致分为三种:View动画,帧动画,属性动画,其实帧动画也可以归类为View动画,只是它和常见的View动画(比如平移、旋转等)表现形式上略有不同而已。View 动画:它是一种渐进式动画。View动画通过对场景里的对象进行不断地图像变化从而产生动画效果。 帧动画:通过有序的播放一系列图像从而产生动画的效果,值得注意的是图片过多过大会导致OOM。 ...
2018-11-16 17:13:47 274
原创 Android学习笔记之RemoteViews的内部机制
什么是RemoteViewsRemoteViews 是一个远程 View,所谓的远程指的是这个 View 显示在其他的进程中(在该应用程序的进程之外),最常见的用法是显示在 SystemServer 进程中,例如通知栏的自定义 View 以及桌面小部件。同时,RemoteViews 表示的是一个 View 结构,它提供了一组基础的操作(set方法)用于跨进程更新它的界面。RemoteVie...
2018-11-06 20:40:43 389
原创 Android学习笔记之桌面小工具AppWidget
实现桌面小工具的关键类AppWidgProviderAppWidgetProvider的本质是一个广播接收者,如下:public class AppWidgetProvider extends BroadcastReceiver 说道广播接收者,那么它的工作原理应该是接收到对应的广播后会去调用其onReceive方法。接下来就来看它的onReceive方法:public voi...
2018-11-06 19:37:04 513
原创 Android学习笔记之自定义View
一、自定义View的分类1.1.继承 View这种方法主要用于实现一些不规则的效果(不方便通过布局的组合方式来实现),比如静态或动态地显示一些不规则的图形(因此需要重写onDraw方法)。值得注意的是,继承View的自定义View需要自己制定 wrap_content 的尺寸,并且需要自己处理padding属性。1.2.继承 ViewGroup这种方法主要用于实现自定义布局,当某种...
2018-10-24 19:56:48 228
原创 Android学习笔记之View的事件分发机制
一、点击事件的传递规则所谓的点击事件分发过程,其实就是当我们点击屏幕,产生了一个MotionEvent之后,系统将这个事件传递给一个具体View的过程。总的来说,事件总是先传递给Activity,然后传递给Window,再传递给顶级View(Activity→Window→DecorView),最后再按照事件分发机制一层一层向下去分发事件。而这个分发过程由三个很重要的方法来共同完成:dis...
2018-10-17 21:16:46 289
原创 Android学习笔记之View的绘制流程(二)——layout、draw过程
一、layout过程layout过程的作用是确定View的最终宽高和四个顶点的位置。其传递过程与measure类似,首先在layout方法中确定ViewGroup的位置后,再去调用onLayout方法,然后在onLayout中遍历所有子元素并调用其layout方法,从而完成layout过程的传递。不同的是,在measure过程中普通的View(不是ViewGroup)的measure过程是一直...
2018-10-10 15:57:24 270
原创 Android学习笔记之View的绘制流程(一)——measure过程
一句话总结:View的绘制流程是从ViewRoot (ViewRootImpl)的 performTraversals方法开始,经过measure,layout,draw 三个过程才能最终将一个View绘制出来。其中measure用来测量View的宽高,layout用来确定View在父容器中的放置位置,draw用来将View绘制到屏幕上。再说细点,当界面强制重绘调用了View的requestL...
2018-10-06 11:46:47 312
原创 Android学习笔记之MeasureSpec
什么是MeasureSpecAndroid系统在绘制View的时候,过程是十分复杂的,其中频繁的使用到了MeasureSpec。那么MeasureSpec是什么?有什么用?简单点说,它是一个int值的中间变量,用来存储View的尺寸规格。再说细点,在测量过程中,系统会将View的LayoutParams根据父容器所施加的约束规则转换成对应的MeasureSpec。MeasureSpec代表...
2018-10-05 15:48:05 377
原创 使用AIDL的进阶知识点
提醒:这篇博文是基于上一篇《学习笔记之IPC》中的AIDL的,如果还不清楚AIDL的基础用法,建议先去阅读它的AIDL部分在AIDL中使用观察者模式在上篇博文中,我们实现了一个简单的图书馆(服务端),然后用户(客户端)可以查询所有书籍,并请求添加书籍。现在我们想为其应用观察者模式,让用户成为观察者,每当图书馆有新书到店时,用户就收到新书的消息。1.首先我们应该定义客户端使用的监听器,有...
2018-09-20 14:42:00 270
原创 Android学习笔记之IPC
目录一、IPC的基本概念二、IPC的几种方式1.使用Bundle传输2.通过共享文件读写数据3.使用Messenger传输4.使用AIDL传输4.1.什么是AIDL4.2.使用AIDL文件的注意事项4.3.使用AIDL的注意事项4.4.使用AIDL实现IPC5.使用ContentProvider 一、IPC的基本概念所谓IPC,是Inter-Pr...
2018-09-19 17:54:07 275
原创 对象序列化
写在前面:关于序列化的概念我曾在《Intent传递数据》这篇博文中第一次使用到,但是我并没有对它进行讲解,只是为了传递对象而直接使用了它。因此在这里有必要简单地说下何为序列化。Serializable接口在传递对象的时候,我们让对象去实现了一个Serializable接口,但是如果我们点开这个接口呢,就会发现它其实是个空的接口。实际上,仅仅实现Serializable接口虽然可行但不完...
2018-09-15 18:02:24 223
原创 Activity的四种启动模式
standard这是一种标准模式,也是系统默认的Activity启动模式。每当启动一个Activity时,不管之前这个实例是否已经存在,都会重新创建一个新的实例。这是一种典型的多实例实现,一个任务栈中可以有多个该实例,每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个Activity,那么这个Activity就会运行在启动它的那个Activity所在的栈中。比如现在有一个Activit...
2018-09-13 17:58:49 245
原创 Activity被销毁后重新创建的数据存储和恢复
一、生命周期一个Activity正常的生命周期应该是:onCreate→onStart→onResume→onPause→onStop→onDestroy以及还有一个onRestart方法会在Activity再次可见时调用:onStop→onRestart→onStart然而Activity可能会在系统配置发生改变以及内存不足的情况下被杀死,这时系统会调用onSaveInsta...
2018-09-12 19:58:52 806
原创 生成APK
使用Gradle生成apk文件1.在gradle.properties文件中添加如下内容:KEY_PATH=D\:\\Documents\\ein.jksKEY_PASS=1234567ALIAS_NAME=EinALIAS_PASS=1234567其中从上至下依次为签名keystore文件的路径,密码,别名,别名密码。2.编辑app/build.gradle文件,在and...
2018-09-11 20:37:47 367
原创 Android学习笔记之系统状态栏、导航栏透明化
系统状态栏、导航栏透明化 1.在需要将系统状态栏透明化的活动中添加如下代码:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //系统状态栏透明化需要Android 5.0以上系统支持 if (Build.VERSIO...
2018-09-07 19:48:18 328
原创 Android学习笔记之定时任务
使用Alarm类来实现定时任务在Java中我们是通过Timer类来实现定时任务的,但是Android手机会在长时间不操作的情况下自动让cpu进入到睡眠状态,从而延长待机时间,这样一来就有可能导致Timer类的定时任务无法正常运行。而Alarm则具有唤醒cpu的功能。1.获取AlarmManager的实例AlarmManager alarmManager = (AlarmManager...
2018-09-04 16:29:12 419
原创 Android学习笔记之全局获取Context
1.因为想要全局都能获取到Context,那么第一个想到的就是Application了,因此我们需要新建一个自定义的Application类去继承Application。public class MyApplication extends Application2.然后在其onCreate()的时候去初始化成员变量Context的值,并且提供一个静态方法用来获取Contextpub...
2018-09-03 16:06:58 266
原创 Android学习笔记之CoordinatorLayout与AppBarLayout
在上一篇文章《可交互提示学习笔记》中可能会遇到这种问题:弹出的Snackbar遮挡了手机底部的内容,这种情况我们可以通过CoordinatorLayout使内容随Snackbar的弹出而上移,以确保不会被Snackbar遮挡到<android.support.design.widget.CoordinatorLayout android:layout_width="match_...
2018-08-31 18:00:44 445
原创 Android学习笔记之可交互提示
可交互提示SnackbarSnackbar也是Design Support库提供的工具,它是一种提示工具,但它并不是Toast的替代品,两者有着不同的应用场景。Snackbar在Toast的基础上扩展,在告诉用户现在发生了什么事情的同时,还提供了一个可交互按钮,当用户点击按钮时可以执行一些额外的逻辑操作。例如删除数据时,弹出Snackbar可以提供一个Undo按钮,从而防止用户的误操作。1...
2018-08-30 17:47:28 280
原创 Android学习笔记之悬浮按钮
悬浮按钮FloatingActionButton悬浮按钮是Design Support库中提供的一个控件,这个控件可以帮助我们轻松地实现悬浮按钮的效果。1.在app/build.gradle中添加design库的依赖implementation 'com.android.support:design:27.1.1'2.在布局文件中使用悬浮按钮<android.supp...
2018-08-30 17:08:29 1017
原创 Android中的矩阵(Matrix)变换
写在前面:本篇博文将结合一个简单的Demo,讲解一下如何通过Matrix实现对Bitmap对象的一些简单处理,例如平移,旋转,放缩等。此外还会讲解一下矩阵乘法中的左乘右乘在Android中的代码实现。一、Matrix类这里说的Matrix类是位于"android.graphics.Matrix"包下的。它是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与...
2018-08-29 19:48:07 3074
原创 Canvas.drawBitmap()方法绘图空白
问题出现的场景:将一个ImageView上原有的Bitmap进行放缩操作后,重新设置到该ImageView上。放缩部分代码如下:private void bitmapScale(float x,float y){ Bitmap newBitmap = Bitmap.createBitmap((int) (mBitmap.getWidth() * x),(int) (mBitmap...
2018-08-29 14:40:47 2572
原创 Android学习笔记之滑动菜单
一、DrawerLayout的简单使用1.DrawerLayout是一个布局,它允许在布局中放入两个直接子控件,第一个子控件就是主屏幕中的内容,第二个子控件就是滑动菜单中显示的内容。其中第二个子控件必须设置layout_gravity属性,它表示滑动菜单在屏幕的左边还是右边。<android.support.v4.widget.DrawerLayout xmlns:andr...
2018-08-28 16:41:19 289
原创 Android学习笔记之Toolbar
一、Toolbar的简单使用1.因为Toolbar的出现是来替代原先的ActionBar的,因此在使用它之前应该将ActionBar隐藏掉。如果我们没有更改过主题的设置,那么在AndroidManifest.xml文件中的application的theme属性值应该为AppTheme:<application android:allowBackup="true" a...
2018-08-25 14:31:34 269
原创 引用资源时?和@的区别
参考博文:https://blog.csdn.net/RichieZhu/article/details/52490521https://blog.csdn.net/xx326664162/article/details/64125654引用资源时,可能遇到下列情况,例如在设置style的时候可以使用“@”引用也可以使用“?”引用 style="?android:attr/pro...
2018-08-24 21:00:02 579
原创 异步消息处理机制之AsyncTask
一、什么是AsyncTask在之前的文章异步消息处理机制学习笔记中有简单介绍Android的异步消息处理机制,但实际运用上,Android提供了更加好用的工具——AsyncTask。AsyncTask背后的实现原理也是基于异步消息处理机制的,只是Android帮我们做了很好的封装而已,其主要功能还是完成了子线程和主线程之间的消息传递。二、AsyncTask的基本用法1.AsyncTas...
2018-08-21 20:25:59 396
原创 Android学习笔记之Service
一、服务的基本概念1.服务是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且要长时间运行的任务。2.服务虽然不依赖于任何UI界面,但它依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停止。3.虽然服务运行在后台,但服务并不会自动开启线程,所有代码都是默认运行在主线程中的。换言之,如果我们没有在服务内部手动创建...
2018-08-20 17:32:51 310
原创 Android学习笔记之消息处理机制
一、消息处理机制的四个组成部分Android中的消息处理机制主要由四个部分组成:Message、Handler、MessageQueue 和 Looper。1.MessageMessage用于在线程之间传递消息,它可以在内部携带少量的信息。我们常用Message的what字段以及arg1、arg2字段来携带一些整型数据,使用Message的obj字段来携带一个Object对象。2....
2018-08-18 10:58:01 418
原创 解析JSON数据
写在前面:测试的时候我申请了一个查询快递的接口,其返回的JSON数据示例如下:{ "resultcode": "200", /* 老版状态码,新用户请忽略此字段 */ "reason": "查询物流信息成功", "result": { "company": "EMS", /* 快递公司名字 */ "com": &
2018-08-16 19:11:10 388
原创 解析XML数据
写在前面:测试的时候我申请了一个查询快递的接口,其返回的xml数据示例如下:<root> <resultcode>200</resultcode> <reason>查询成功!</reason> <result> <company>顺丰</company> &
2018-08-16 16:25:49 795
原创 Android学习笔记之使用HTTP协议访问网络
一、使用HttpURLConnection1.通过URL的openConnection()方法获取一个HttpURLConnection对象URL url = new URL(mURL);HttpURLConnection connection = (HttpURLConnection) url.openConnection();2.设置请求网络的方式//设置请求类型为GET...
2018-08-15 20:19:37 448
原创 Android学习笔记之PendingIntent
一、什么是PendingIntent所谓的 PendingIntent 是区别于 Intent 而存在的。Intent(即意图)是立即发生的,而 PendingIntent 是在将来的某个时刻发生的。二、获取PendingIntent的主要方法PendingIntent 支持三种待定意图:启动Activity,启动Service,发送广播,对应着如下三种方法:PendingInte...
2018-08-14 20:35:11 4651 1
原创 Android学习笔记之Notification
一、通知的基本用法1.获取通知管理器NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);2.创建通知渠道(NotificationChannel) 如果是8.0以上系统的话因为NotificationChanne...
2018-08-14 19:01:44 572
原创 Android学习笔记之ContentProvider
一、创建自己的ContentProvider1.新建一个自定义的Provider去继承ContentProvider类public class DatabaseProvider extends ContentProvider2.打开AndroidManifest.xml文件,对自定义的Provider进行如下配置:<provider android:name="....
2018-08-11 17:10:58 236
原创 ContentResolver应用之读取手机联系人
一、ContentResolver的CRUD操作1.Create 新增数据ContentValues values = new ContentValues();values.put("column1","content");values.put("column2",1);values.put("column3",true);getContentResolver().insert(...
2018-08-10 18:28:46 384
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人