- 博客(81)
- 资源 (2)
- 收藏
- 关注
原创 Kotlin高级语法
Kotlin高级语法委托类委托当一个类继承于另一个类或者实现某个接口,我们需要在该类中重写或者实现对应的方法,为了代码简练或者其他原因我们会用到委托的思想,也就是让别的类来帮助我们完成这些事情,在Kotlin中对委托进行了原生的支持,用by关键字实现。//将Collection的方法委托给c对象完成class DelegateCollectionT>(val c: Coll
2018-01-12 16:51:40
2586
原创 Kotlin进阶
Kotlin进阶集合创建Kotlin没有自己的集合API而是直接调用Java原有的集合,这样有两个好处,一:对Kotlin开发人员来说不用去”重复造轮子“;二:对使用者来说,节省了学习成本。普通集合我们知道在Java中初始化一个集合通常分为两步:创建,赋值。咋一看是没什么毛病的,但是在我们想要创建一个已知固定的集合时就会很麻烦,因为不能像数组一样在初始化的同时给集合赋值。Ko
2018-01-12 16:26:30
2065
原创 Android简单接入Vitamio
Android简单接入Vitamio 说到第三方视频播放控件,真正意义上好用的就那么几家,这里之所以要说真正意义上是因为市面上存在一部分三方视频播放器是基于原生的VideoView封装而来的,并不是说原生的不好,而是原生支持的视频格式实在是很有限,而且在线播放也是一个短板。写在前面在很早之前就有接触过Vitamio这款播放器,当时觉得很容易就没有过多的注意,最近又重新开始使用
2018-01-12 16:21:25
2287
2
原创 二进制原码、反码、补码
二进制原码、反码、补码 以前在大学看到二进制原码、反码、补码这些的时候几乎是一眼略过,因为觉得和上层开发没什么关系,现在因为有个项目要做音频流的封装,就需要对二进制进行操作了,这里复习一下。 任何数据在计算机中都是以二进制进行存储的,对于一个数,计算机要使用一定的编码方式进行存储,原码、反码、补码是机器存储一个具体数字的编码方式。原码 原码是人脑最容易理解和计算
2017-12-14 15:07:55
1021
原创 Android强、软、弱、虚引用
Android软、弱、虚引用 相对于C/C++,Java不需要程序员自己管理内存的分配和回收,这些相关的内存操作都交给了GC(Gabage Collection)进行管理。按我们今天的理解来说,GC就像一个AI机器人,它会不定时的扫描当前内存,并且释放掉不必要的,那它是如何判断出哪些需要回收的呢。这里就引入了Java引用机制,根据引用强弱不同分为了强、软、弱、虚四个引用等级。GC会参照这个等级进
2017-12-07 09:36:23
629
原创 OpenGL 绘制简单三角形
OpenGL 绘制简单三角形 前段时间比较忙,研究别的东西去了,最近才想起来,关于OpenGL的实际运用还没有写,现在补回来。准备但凡在Android环境下使用OpenGL,首先需要一个GLSurfaceView实例。接下来大致分为两步:设置OpenGL版本号,通常使用2.0兼容性最好,具体版本区别自行百度。glSurfaceView.setEGLContextClientVersion(2
2017-11-22 17:33:01
3196
2
原创 Kotlin Configure
#配置Android Studio 3.0以上原生是支持kotlin的,为了方便我们出错的时候可以更容易的找出问题,大概总结了一下我们自己配置需要哪些步骤。
2017-10-31 12:54:03
2249
1
原创 Android 笔记之屏幕显示
Android 笔记之屏幕显示横竖屏Manifest 在Manife中对Activity设置android:screenOrientation可以控制当前Activity的横竖屏显示样式。代码 在BaseActivity中通过如下代码可以为所有继承了BaseActivity的子类设置屏幕显示方式。注意需要在onCreate()的super()之前调用。 requestedOrienta
2017-10-23 17:50:03
275
转载 Linux下解压乱码问题解决
Linux下解压乱码问题解决给unzip打补丁根据 GitHub - ikohara/dpkg-unzip-iconv: Makefile for Debian unzip package with iconv 上的安装步骤,给unzip打补丁,然后就可以用-O参数了unar方法这个最简单省力,默认debian已经安装了额unar,这个工具会自动检测文件的编码,也可以通过-e来指定。unar
2017-10-21 17:22:22
1212
原创 Android6.0运行时权限请求
Android权限请求Android在SDK23(Android 6.0)之后将权限作了区分,一种是普通权限,一种是6.0权限也就是危险权限。普通权限和之前的没有什么区别,而危险权限除了需要在Manifest中进行声明外还需要在运行时进行手动申请,只有在申请后用户同意了才能使用该权限。权限版本兼容手机版本<23 & targetSdkVersion&
2017-10-11 10:29:33
458
原创 Android资源限定符
资源限定符使用Android编程不可避免的需要进行应用适配,大多数情况可以通过dp/sp等自动换算单位以及动态计算等策略实现,但是当遇到一些要求比较复杂的适配时就显得力不从心了,这样就需要用到限定符。其实我们平常开发中默认就用到了限定符,例如:drawable、drawable-xhdpi、drawable-xxhdpi等,-后面的就是所谓的限定符,通过指定xhdpi、xxhdpi针对设备分辨率对资
2017-10-11 10:09:22
777
原创 GLSL(着色器语言)
GLSL(着色器语言)简介OpenGLES的着色器语言GLSL是一种高级的图形化编程语言,其源自应用广泛的C语言。与传统的c语言不同的是,它提供了更加丰富的针对于图像处理的原生类型,诸如向量、矩阵之类。OpenGLES 主要包含以下特性:GLSL是一种面向过程的语言,和Java的面向对象是不同的。GLSL的基本语法与C/C++基本相同。它完美的支持向量和矩阵操作。它是通过限定符操作来管理输
2017-10-11 10:01:07
5682
原创 OpenGL(二)
向量我们知道在OpenGL中所有图形都是由图元,组成的,而每个图元都是根据指定的坐标所定义的,常用的坐标由XYZ三元组成,然而,一组XYZ还能表示一个向量。在使用向量来操作3D几何图形时,向量可能就变成了最重要的基本概念了,一个向量表示了两个重要的值——方向和数量。在3D笛卡尔坐标中,从坐标原点到某个顶点组成的一条带箭头的线段(- -!带箭头只是为了方便理解,不是真的会带箭头)可以视为一个向量。
2017-08-18 17:27:50
1526
原创 Kotlin基本语法
KotlinKotlin包含了面向对象编程和函数式编程两种方式函数式编程头等函数——把函数当成值来用,可以用变量来表示,当做参数传入某个函数或者作为返回值。不可变性——使用不可变对象,保证它们的状态在创建之后不会被改变。(这不就是final吗)无副作用——使用的是纯函数,此类函数在输入相同时会产生相同的效果,不会修改其他对象的状态,也不会和外面的世界交互。(感觉上就是没有面向对象的多态而已)
2017-08-18 16:43:39
328
原创 Android 贝塞尔曲线简单应用(一)
Android 贝塞尔曲线简单应用(一) 最近发现四大基础动画(缩放、旋转、位移、透明)在使用时总觉得少了些平滑和过度的感觉。之后看了很多成功的精品APP的实现又查了一些相关的资料。发现很多很炫酷的动画都是通过贝塞尔曲线实线的,而使用贝塞尔曲线有个很明显的好处,那就是动画看着会让人觉得不舒服,而不是传统的给人一种突兀的感觉,同时也更符合当下圆滑的设计理念。效果图贝塞尔绘制...
2017-08-07 15:55:19
1510
原创 Android Paint绘制动态心电图效果
此前自定义View中用的比较多的是对view位置的控制和功能性的融合,视觉上和动画上的使用要少一些,因此最近心血来潮准备用原生的view绘制些动画效果出来。自定义View的基础这里就不多阐述了,但还是大致说明一下。首先,我们常见的View无非两种,一种是View(独立的控件,不能存在子控件),一种是ViewGroup(大多是充当容器的作用,可以包含子空间,例如:XXLayout)。但其实从本质上
2017-08-03 17:08:36
6536
5
原创 OpenGL
OpenGL图元就如同所有物质都是由原子组成,而原子由质子、中子、电子组成,只是排列方式有所不同而已。这和OpenGL类似,在OpenGL中构建的场景也是由更小、更简单的形状组成,然后按照一定的方式排列组合而来,这些组成3D物体的筑块我们称之为图元。着色器顶点着色器一个单独的点就是一个图元,它只需要一个顶点。三角形也可以是一个图元,它由三个顶点组合而成。OpenGL通过特殊的排列方式将多个图元组
2017-08-03 11:18:21
2419
原创 Android四大组件-Service
Service不需要直接和用户交互,被设计用于长时间的后台操作。需要在Manifest中进行注册。不是一个子线程。和别的组件一样运行在Main Thread中,耗时操作需要另起新现成或者使用IntentService,否则会造成ANR错误。不是一个单独的进程,除非特殊声明。可以通过startForeground()方法指定前台服务,高优先级,不会被系统杀掉。启动方式。独立启动Context
2017-08-03 11:17:05
444
1
原创 Android Activity启动模式详解
Activity启动模式估计很多人都能了解个大概,但是其每个之间的关系其实很微妙,特别是在没有理解Activity启动原理的情况下实在是很容易造成混淆。LaunchMode首先需要先说一下,在我们创建一个Activity之后需要将Activity放到AMS中的一个任务栈中进行管理,既然是栈,自然也就满足栈“后进先出”的基本性质,这里就不多赘述。但是有一点需要注意,Activity需要存放
2017-06-20 18:15:45
320
原创 Android 单点触控(放大、缩小、旋转、位移)
移动开发中比较常见的手势操作有放大、缩小、旋转等。但是这其中大多数为两指实现的对图片操作手势。但是个别特殊情况例如对某个对话框进行手势操作,这样就需要用到单指实现操作手势了。相对于两指算法,单指要麻烦一些,特别对于数学不好的童鞋来说很难想到。因此特别写出来让大家参考一下。(虽然旋转的算法也是受了别人的启示才写出来,具体在哪里看到了忘记了)不BB直接上代码:public boolean onTouch
2017-06-19 09:47:27
1774
3
原创 Android 深入分析Activity生命周期
Android 深入分析Activity生命周期Activity作为四大组件之一,是使用最为频繁的一种控件,日常开发中除了Window、Dialog和Toast之外,我们能见到的界面的确只有Activity。而Activity的生命周期作为基础中的基础就算入门级Android程序员也是耳熟能详。但是在很多特殊情况下生命周期是十分微妙的、典型情况下的生命周期所谓典型情况下的生命周期,是指在有用户参与
2017-06-12 16:22:59
444
原创 Android Bitmap处理
几乎所有图片类文件在Android内存中都会以Bitmap位图的形式存在,由于各种奇葩的需求和性能优化的原因,优化Bitmap成为Android性能优化中最常见的手段之一。其中具体优化步骤这里暂不赘述,有兴趣的可以看我的另外一篇文章 Android Bitmap优化 最常见的Bitmap处理:分辨率处理。解决Bitmap内存占用大的问题,直接修改其分辨率是最有效的方式。常见的修改方式分为以下两种
2017-06-08 17:01:02
777
原创 Material Design——RippleDrawable详解
Google在Android5.0之后推出了Material Design的设计风格,而涟漪Ripple效果是其中最具有代表性的。最近需要在项目中使用Ripple效果,看了网上很多介绍,大致都写的很基础,并且没有介绍清楚具体对应的使用方法,只有比较常见的几种。在碰到一些特殊情况后就不能适用了。因此这里总结下RippleDrawable的关键推荐的几种用法。最常见的使用方法,直接通过<Ripple>
2017-06-02 16:12:25
2363
1
原创 Android 打造万能网络解析框架
一个普通APP的开发中使用最频繁的操作莫过于网络请求,既然这样我们便需要将全部的网络请求操作都集中起来使用统一的方法进行管理。否则一个临时的任务变更会增加大量的工作量对一个完整的网络请求进行分析,大致分为以下几个流程:发起网络连接得到回执消息,判断连接情况根据实际需求对数据进行解析发起网络连接通常会使用三方网络请求库,这里以Retrofit为例,首先需要对Retrofit进行初始化操作OkH
2017-04-25 15:28:27
687
原创 Android 进阶——NDK开发
NDK介绍NDK(Native Development Kit)即本地代码开发套件,既然提到本地代码与之对应就有非本地代码。 众所周知Android系统是基于Linux进行改写而成,而Android程序是由Java代码进行编写,Java代码最大的优点在于其跨平台的特性,因此不能直接运行在操作系统之上,而是运行在自家的JVM虚拟机中,Android程序也是这样,每一个Android程序都运行在一个独
2017-04-24 16:50:43
498
原创 Android NDK开发头文件生成
Jni作为C和Java交互的规范,其方法命名规则有自己独特的一套逻辑,对于习惯了正常命名规范的我们来说无疑会增加我们代码编写不必要的负担,对此其实JDK本身已经为开发者准备好了一键生成对应方法头文件.h的方法,具体实现如下。在Android Studio项目工程下,使用命令行,定位到项目java目录下,注意一定要放在这个目录下,因为之后需要使用包名+类名的方式进行识别。然后执行相应命令如下:java
2017-04-24 12:07:05
1038
原创 AndroidStudio 类成员变量规范设置
Android官方推荐所有类的成员变量都已mXXX格式进行书写,但是由于习惯了直接写名字和ButterKnife自动批量生成修改起来很不方便。这里通过AndroidStudio进行编程时可以直接设置默认的成员变量显示方式。
2017-04-18 11:42:00
2903
原创 Android 异步方法以同步方式进行
强制异步转同步方法Android系统中规定耗时任务需要在异步线程中进行,特别是网络请求必须在异步线程中进行否则会抛出NetworkOnMainThreadException,但是在一些特殊的情况我们需要保证在获得到网络请求结果之后在进行余下操作,这时候便需要在UiThread中进行相关操作。这样就需要用到线程阻塞的原理,这里可以借助Callable或FutureTask来实现。public stat
2017-04-18 11:34:00
6614
原创 Android progressbar骚操作
作为比较常见的控件,经常需要针对项目对其进行一定程度的定制和修改,当然一些较大程度的定制和修改都是基于自定义View进行绘制的,但是一些改动较小的地方便可以使用Android原生progressbar进行实现。progressbar分为两种样式,一种为普通的圆形样式,没有具体的进度值,仅仅作为loading提示作用。另一种为水平样式,可以显示出当前的执行进度。可以在xml下通过不同的style...
2017-03-30 16:16:55
2621
原创 Android 多点触控(放大、缩小、旋转、位移)
通过多点触控实现图片的放大、缩小、旋转、位移效果。 private float oldX1 = 0; private float oldX2 = 0; private float oldY1 = 0; private float oldY2 = 0; private float oldRotation= 0; private boolean
2017-03-20 13:54:42
2057
3
原创 Android Bitmap优化
开发中经常需要使用Bitmap进行位图显示,由于现在手机像素的提升,直接频繁显示原图会消耗大量的内存,很容易造成OOM,因此我们需要对Bitmap进行压缩处理。首先在通过BitmapFactory创建Bitmap时可以发现,官方为我们提供了一个option参数,大多数开发者都知道这个参数可以帮助我们调节Bitmap的质量,从而实现图片的压缩。public enum Config {
2017-03-20 13:07:20
842
原创 Android 笔记之Retrofit
Retrofit是一个基于okhttp再封装的网络请求框架,其独特的注解式构建模式十分适合对MVP模式下的项目进行搭建。首先是创建一个Retrofit对象,正如介绍上说的,它是基于okhttp进行再封装,因此一些特殊的设置需要直接使用到okhttp进行配置后使用。如网络请求超时时间,网络拦截器等等。如下://初始化okht OkHttpClient okHttpClie
2017-03-13 13:51:14
336
原创 Android笔记之seekTo
有时候我们在播放视频的时候需要对视频进行seekTo处理。通过videoPlayer或者mediaPlayer的seekTo方法理论上是可以简单的实现。 public native void seekTo(int msec) throws IllegalStateException;可以看出我们只需要传入一个视频对应的毫秒数就可以直接对视频进行seek。但是实际上通过一个seekBar来进
2017-02-23 13:22:53
5782
原创 Android笔记之获得虚拟按键、状态栏高度
开发中经常会需要计算各种布局高度,其中就包括了虚拟按键的高度和状态栏高度。在使用PopWindow时,如果选在从底部显示,这时如果没有计算虚拟按键高度就会导致在开启了虚拟按键的手机上PopWindow被虚拟按键遮挡。如果选择全屏显示,如果没有计算状态栏高度便会导致在一些Rom中强制显示状态栏,而PopWindow显示不全。以下是对应的代码。/** * 获取 虚拟按键的高度
2017-02-22 16:25:19
1320
原创 Android笔记之系统软键盘布局
对于触屏手机软键盘是正常使用中不可或缺的一样东西,在Android编程时经常会遇到一些软键盘方面的文字,经过本人实践总结,把有关的坑写在下面。Android为了让用户在软键盘弹出后能显示出文本编辑框(也就是EditView),会默认判断如果键盘弹出后会遮挡编辑框便让界面布局挤压,将编辑框强行顶在软键盘上方,这样对于用户体验来说是挺好的,但是对于一些复杂的界面,经常会出现很多问题。这里我们便需要
2017-02-22 15:52:57
900
转载 Andorid 解决VideoView透明问题
开发中当使用SwipeBackActivity进行滑动返回后,发现一个奇葩的问题,将Activity底色设为透明后VideoView也变透明了,而且是无视父布局区域的。这里我自己提供了一个解决办法:为VideoView设置背景色,这样可以避免透明的问题,但是同时图像也被掩盖了(坑爹)。这里就需要我们对视频进行判断,而VideoView的判断机制是很坑爹的,需要在onPrepared()方法...
2017-02-09 16:46:55
8274
原创 Ubuntu 屏幕颜色校准
大家都知道在windows里面可以通过显卡驱动对屏幕显示颜色进行调整,并且可以用系统自带的颜色校准工具进行伽马值调节。那么问题来了,在Ubuntu中要怎么调节呢。经过在网上曲折的搜索,暂时找到了两种调节方案一:使用Ubuntu系统设置中的Color功能对颜色进行调节,因为只有几个系统默认的颜色方案,因此需要借助另外一个软件DisplayCal通过这个软件可以对颜色进行详细的设置,并且保存方案,然后...
2017-02-05 21:16:54
10104
原创 Android 触摸事件传递
近期项目涉及到了大量的手势操作,对Android手势监听也有了更加全面和深入的了解。这里大致的说一下来方便自己和大家理解流程。具体太官方的解释和详情就不多赘述了,从我的个人实际体会来说。会说的比较直接。首先基本上所有View都是通过一个方法来响应监听事件,public boolean onTouchEvent(MotionEvent event) ;只要是Android手势操作像一
2017-01-21 17:41:15
1542
1
原创 Android 笔记之RecyclerView
5.0之后推出的新控件,需要额外添加依赖。类似listview,和listview不同的是,该创建方式属于插件继承模式,它不关心item中的内容,不关心item之间的间距,不关心item添加和删除的动画。 但是对应设置了三个接口,分别是layoutmanager,decoration, animator,可以把他们看成三个插件,通过这三个插件来完成recycleview所不擅长的三个模块。通过使用
2017-01-16 23:04:57
347
原创 Android 笔记之Log
打印Log日志在程序开发调试中都无比重要,因此通常会为Log书写一个工具类来方便其使用。public class UtilLog { public static boolean IsLog = false; public static void setlog(String log) { if (IsLog) Log.i("xnews", log)
2017-01-08 16:16:11
368
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅