自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (9)
  • 收藏
  • 关注

原创 在AS上用C语言(JNI方式)播放gif动图

Android中gif播放一般是比较耗内存的操作,Android中的ImageView不能直接播放gif,使用Java方式实现的gif播放的是非常耗内存的,就算是使用Glide这种优秀的三方库,也是一样的,所以项目中有gif播放需求,尤其是列表中有gif播放的,建议使用JNI的实现方式。创建工程先将基本的功能,例如申请权限,按钮点击等 用Java实现,activity_main.xml 如下:<LinearLayout xmlns:android="http://schemas.

2020-11-26 10:31:25 785

原创 Android自定义View实现QQ气泡效果

首先我们来看一下最终的效果:根据我们上边拆分出来的公式,我们分别看看每一个效果需要如何去实现:红色圆:canvas.drawCircle消息数字:canvas.drawText拖拽粘性效果:canvas.drawPath、 (两条二阶)贝塞尔曲线 (精髓所在)回弹效果:属性动画跟随移动:OnTouchEvent处理MotionEvent.ACTION_MOVE事件爆炸效果:属性动画View自定义属性为了提高自定义View的灵活性,我们需要提供几种自定义属性给外部来设.

2020-11-19 11:16:34 476

原创 Android 使用svg构造交互式中国地图

1. 概念什么是svg即Scalable Vector Graphics 可伸缩矢量图形SVG的W3C的解释: http://www.w3school.com.cn/svg/svg_intro.asp什么是矢量图像,什么是位图图像?1、矢量图像:SVG是W3C 推出的一种开放标准的文本式矢量图形描述语言,他是基于XML的、专门为网络而设计的图像格式,SVG是一种采用XML来描述二维图形的语言,所以它可以直接打开xml文件来修改和编辑。2、位图图像:位图图像的存储单位是图像上每一点的像素值,

2020-11-12 11:39:26 720

原创 MMKV原理详解

性能对比 我们将 MMKV 和 SharedPreferences、SQLite 进行对比, 重复读写操作 1k 次。相关测试代码在Android/MMKV/mmkvdemo/。结果如下图表。 单进程性能 可见,MMKV 在写入性能上远远超越 SharedPreferences & SQLite,在读取性能上也有相近或超越的表现。 多进程性能可见,MMKV 无论是在写入性能还是在读取性能,都远远超越 MultiProcessSharedPreference..

2020-09-30 16:19:25 3717

原创 MMKV学习和使用

MMKV介绍 MMKV 是腾讯开源的一款基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强,从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证。 GitHub地址:https://github.com/Tencent/MMKV 为什么要替代SharedPreferences? 1,数据加密。 在 Android 环境里,数据加密是非常必须的,SP实际上是把键值对放到本地文件中进行存储。如果...

2020-09-30 15:51:39 2473

原创 Binder面试系列之四

1.1 什么是MMU​ MMU(Memory Management Unit)主要用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权、多任务多进程操作系统。1.2 发展历史注意:学习一个知识点很重要的一步是了解其为什么而存在?它的存在是为了解决什么问题?最后,在学习的过程中带着这些问题去理解、去思考​ 在许多年以前,还是使用DOS或一些古老的操作系统时,内存很小,同时,应用程序也很小,将程序存储在内存中基本能够满足需要。

2020-09-30 11:33:53 220

原创 Binder面试系列之三

1.1 简介 内存现代计算机都有两种以上的运行模式(普通模式、特权模式),linux系统只有两层:用户空间高优先级模式(特权模式) 低优先级模式(普通模式)。​ linux系统在高优先级模式中运行系统内核代码以及与硬件密切相关的代码。低优先级运行应用程序与硬件无关部分。​ 应用程序不能直接操控硬件或者调用内核函数,需借助一系列接口函数申请让系统调用相关代码在内核空间运行,获取代码运行权限。1.2好处 ​ 应用程序崩溃不会造成内核崩溃,拿windows举例来说,QQ

2020-09-30 11:30:59 173

原创 Binder面试系列之二

谈谈你对 binder 的理解?面试官提了一个问题,我们来看看 张三、李四 和 王五 三位同学的表现如何吧张三自认为无所不知,水平已达应用开发天花板,目前月薪 10k面试官️:谈谈你对 binder 的理解张三:binder 是用来跨进程通信的,可以分为 client、server、binder 驱动以及 service manager 四部分。面试官:一次拷贝原理知道吗?张三:不太清楚,其实对应用开发来说,没必要知道的。面试官:好的,回去等通知吧李四业余时间经常打游.

2020-09-30 11:29:19 897

原创 Binder面试系列之一

为什么会有Binder通信机制,为什么不能用linux中已有的进程框架呢?Google工程师究竟是如何考量的,这一切需要从一场恋爱说起了解binder之前我们看看原有Linux进程是如何通信的吧! 为什么需要在内存中拷贝两次呢?在了解Linux进程通信前我们先理解下 恋爱的故事吧!故事:男孩和女孩在某次旅游一见钟情,而旅行结束的他们不得不返回各自的工作城市,那个时代还没有微信,由于相隔在不同的城市。相思念的他们只能通过邮局抒发彼此爱慕之情如果男孩想要给女孩发送信封,需要向本

2020-09-30 11:21:17 228

原创 事件分发机制原理 之二

常见事件既然是事件分发,总要有事件才能分发吧,所以我们先了解一下常见的几种事件。根据面向对象思想,事件被封装成 MotionEvent 对象,由于本篇重点不在于此,所以只会涉及到几个与手指触摸相关的常见事件:事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。 ACTION_MOVE 手指 在屏幕上滑动 时触发,会会多次触发。 ACTION_UP 手指 离开屏幕 时触发。 ACTION_CANCEL 事件 被上层拦截 时触发。 对于

2020-09-28 11:49:13 193

原创 事件分发机制原理 之一

为什么要有事件分发机制?安卓上面的View是树形结构的,View可能会重叠在一起,当我们点击的地方有多个View都可以响应的时候,这个点击事件应该给谁呢?为了解决这一个问题,就有了事件分发机制。如下图,View是一层一层嵌套的,当手指点击 View1 的时候,下面的ViewGroupA、 RootView 等也是能够响应的,为了确定到底应该是哪个View处理这次点击事件,就需要事件分发机制来帮忙。View的结构:我们的View是树形结构的,在上一个问题中实例View的结构大致如下:l

2020-09-28 11:44:59 231

原创 Path之PathMeasure 进阶篇

Path & PathMeasure顾名思义,PathMeasure是一个用来测量Path的类,主要有以下方法:构造方法方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建 PathMeasure 并关联一个指定的Path(Path需要已经创建完成)。 公共方法返回值 方法名 释义 void setPath(P.

2020-09-28 11:05:15 992

原创 Path方法详解 进阶篇

作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点连接到最后一个点,形成一个闭合区域 添加内容 addRect, addRoundRect, addOval, addCircle, addP

2020-09-27 17:11:40 2948

原创 Path之贝塞尔曲线 进阶篇

一.Path常用方法表为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下,为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之

2020-09-27 10:41:07 889

原创 Path之基本操作 进阶篇

一.Path常用方法表为了兼容性(偷懒) 本表格中去除了部分API21(即安卓版本5.0)以上才添加的方法。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点连接到最后一个点,形成一个闭合

2020-09-24 16:26:05 1633

原创 Canvas之图片文字 进阶篇

接着上一篇文章继续学习1.绘制图片绘制有两种方法,drawPicture(矢量图) 和 drawBitmap(位图),接下来我们一一了解。(1)drawPicture使用Picture前请关闭硬件加速,以免引起不必要的问题!使用Picture前请关闭硬件加速,以免引起不必要的问题!使用Picture前请关闭硬件加速,以免引起不必要的问题!在AndroidMenifest文件中application节点下添上 android:hardwareAccelerated="false"以关闭

2020-09-24 14:36:26 909

原创 Android如何关闭硬件加速

硬件加速Android 3.0 (API level 11), 开始支持所有的View 的canvas都会使用GPU,但是硬件的加速会占有一定的RAM。在API >= 14上,默认是开启的,如果你的应用只是标准的View和Drawable,全局都打开硬件加速,是不会有任何问题的。然而,硬件加速并不支持所有的2D画图的操作,这时开着它,可能会影响到你的自定义控件或者绘画,出现异常等行为,所以android对于硬件加速提供了可选性如果你的应用执行了自定义的绘画,可以通过在真机上测试开启硬件

2020-09-24 11:43:21 1826

原创 Canvas之绘制基本形状

一.Canvas简介Canvas我们可以称之为画布,能够在上面绘制各种东西,是安卓平台2D图形绘制的基础,非常强大。一般来说,比较基础的东西有两大特点:1.可操作性强:由于这些是构成上层的基础,所以可操作性必然十分强大。2.比较难用:各种方法太过基础,想要完美的将这些操作组合起来有一定难度。不过不必担心,本系列文章不仅会介绍到Canvas的操作方法,还会简单介绍一些设计思路和技巧。二.Canvas的常用操作速查表操作类型 相关API 备注 绘制颜色 dra.

2020-09-23 17:51:04 569

原创 自定义View分类与流程 基础篇

一.自定义View分类我将自定义View分为了两类(sloop个人分类法,非官方):1.自定义ViewGroup自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout,包含有子View。例如:应用底部导航条中的条目,一般都是上面图标(ImageView),下面文字(TextView),那么这两个就可以用自定义ViewGroup组合成为一个Veiw,提供两个属性分别用来设置文字和图片,使用起来会更加方便。2.自定义V

2020-09-23 16:37:18 152

原创 Android 屏幕(View)坐标系统 基础篇

一.屏幕坐标系和数学坐标系的区别由于移动设备一般定义屏幕左上角为坐标原点,向右为x轴增大方向,向下为y轴增大方向, 所以在手机屏幕上的坐标系与数学中常见的坐标系是稍微有点差别的,详情如下:(PS:其中的∠a 是对应的,注意y轴方向!)实际屏幕上的默认坐标系如下: 假设其中棕色部分为手机屏幕二.View的坐标系注意:View的坐标系统是相对于父控件而言的. getTop(); //获取子View左上角距父View顶部的距离 getLeft(); ..

2020-09-23 15:29:53 1224

原创 多进程 Webview 实战

"Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView"以上为官方给出的说明,用白话来说就是,一个app中,如果有多个进程A、B、C,并且在A、B、C进程都是用到WebView的话,在Android P 以及之后的版本中运行会报错: //Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView //为其它进程webView设置目录 @RequiresApi(api = 28) .

2020-09-21 16:43:08 3318

原创 Android WebView使用常见问题以及解决方案(高级)

总结下WebView的一些使用方法提醒:我们在使用WebView是最好不要把WebView写在xml中,直接用如下动态加载WebView方法更优WebView webView = new WebView();frameLayout.addView(webView);//动态加载1.打开网页时调用系统浏览器, 而没有在本WebView中显示。我们可以调用mWebView的setWebViewClient在本WebView中显示。mWebView.setWebViewClient(new.

2020-09-21 15:42:16 2487 2

转载 从简单使用到源码分析,一文搞懂Handler

Handler可以说小伙伴们用的非常多了,可以说Handler是支撑整个Android系统运行的基础,本质上Android系统都是由事件驱动的。而处理事件的核心就在于Handler。接下来我们就从简单的使用,到源码分析让你彻彻底底明白Handler的本质。不会再让你发出为什么Looper.loop不会堵塞主线程,Handler是如何切换线程等这类疑惑。简单使用一般是在主线程中实现一个Handler,然后在子线程中使用它。class HandlerActivity: AppCompatActiv

2020-09-10 16:54:47 112

原创 解决竖向RecyclerView嵌套横向RecyclerView时的滑动冲突

问题描述我们写瀑布流是,如果竖向RecyclerView嵌套横向RecyclerView,当滑动横向RecyclerView时,竖向的RecyclerView会抖动。事件分发总结dispatchTouchEventreturn true:表示该View内部消化掉了所有事件return false:表示事件在本层不再继续进行分发,并交由上层控件的onTouchEvent方法进行消费...

2020-04-16 10:14:28 4324 1

原创 git 删除某次指定的提交

reset命令有3种方式:1:git reset –mixed:此为默认方式,不带任何参数的gitreset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息2:git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到indexfile一级。如果还要提交,直接commit即可3:git reset –hard:彻底回退到某...

2020-03-19 08:46:28 1010

原创 微信小程序和Android开发的对比

1、开发语言微信小程序主要开发语言是 javascript;使用 wxml + wxss 文件来描述界面;使用 app.json + app.wxss 文件来配置项目;2、wxml、wxss 是什么?对于 Android 来说,对于页面的描述基本上在 xml 中定义的,比如:&lt;FrameLayoutandroid:id="@+id/layout"android:lay...

2018-11-27 14:45:56 4354

转载 Dagger2的使用

什么是Dagger2Dagger是为Android和Java平台提供的一个完全静态的,在编译时进行依赖注入的框架,原来是由Square公司维护,现在由Google维护。 我们知道Dagger是一个依赖注入的框架,那么什么是依赖注入呢?我们在activity中有可能会用到很多很多的类,这些类要在activity中进行实例化,这样就导致我们的activity非常依赖这么多的类,这样的程...

2018-08-24 11:01:57 113

原创 利用android studio生成jar包,制作自己的SDK

很多时候我们要将自己开发一个类库打包成jar包以供他调用,这个jar包也叫你自己的SDK或者叫library。android studio生成jar包的方法与eclipse有所不同。在studio中library其实是module的概念。最近刚刚才开始接触SDK的开发,先从简单的开始吧,今天就介绍使用Android Studio开始第一个SDKDemo的开发。1、先使用Androi

2018-04-16 16:18:19 6742

原创 error: style attribute '@android:attr/windowEnterAnimation' not found

在Project/gradle.properties中添加 android.enableAapt2=false

2018-01-22 15:16:08 1051

原创 LruCache(内存缓存)的原理

LruCache是android提供的一个缓存工具类,其算法是最近最少使用算法。它把最近使用的对象用“强引用”存储在LinkedHashMap中,并且把最近最少使用的对象在缓存值达到预设定值之前就从内存中移除。其在API12被引进,低版本可以用support包中的类。      LruCache中Lru算法的实现就是通过LinkedHashMap来实现的。LinkedHashMap继承于H

2017-10-13 15:42:21 1062

原创 APP启动时白屏/黑屏 或者 Activity打开时白屏/黑屏

绘制整个窗口需要按顺序执行以下几个步骤: 1. 绘制背景。 2. 绘制View本身的内容。 3. 绘制子View。 4. 绘制修饰内容(例如滚动条)。在Theme中可以指定窗口的背景,Activity的ICON,APP整体文字颜色等,如果说没有指定任何属性,就会用默认的属性,所以我们的白屏和黑屏和空DecorView息息相关,我们给APP设置的Style就决定了是白屏还是黑屏。

2017-08-11 10:54:52 347

原创 Android Bitmap大量使用不产生OOM之“加载大图片资源优化”

这几天在做图片浏览器,但是在加载大量图片的时候发生了OOM.为了解决这个加载图片一般都会遇到的问题,查看了Google官方的doc,将学习的知识记录下来,希望对大家有帮助.我们先来看看为啥要关注bitmap使用优化: 1.移动设备通常有限制的系统资源。比方说,Android设备可以限定每个应用只能最多分配16M。也就是说你的应用必须优化到占用内存少于16M。 2.Bitmap恰

2017-08-08 10:42:14 572

原创 ViewPager数据加载错乱的问题

利用ViewPager作了一个滑动页面,发现里面的图片和对应的页数都是错乱的,后来发现是在调用方法的地方不对,因此记录下来,希望对大家有用package me.quantumti.masktime.adapter; import java.util.List; import android.support.v4.view.PagerAdapter; import androi

2017-07-31 19:44:48 1731

原创 Ubuntu 16.04下搭建Web服务器

1.本文Ubuntu 16.04下搭建Web服务器(MySQL+Apache)的内容很多可能参照网上前辈的,但有所改进吧。这些设置可能会有所不同,你需要根据不同情况进行修改。2.切换管理员身份在ubuntu中需要用root身份进行操作,所以用下面的命令确保以root身份登录: 输入 su , 然后再输入密码.3.开始安装mysqlapt-get inst

2017-06-26 14:15:59 12292

原创 Android 利用AudioManager控制后台音乐播放器暂停,播放

1.通过触发媒体的按钮来操作播放器状态:KeyEvent.KEYCODE_MEDIA_PAUSE public static void sendMediaButton(Context context, int keyCode) { AudioManager audioManager= (AudioManager) context.getSystemService(Conte

2017-06-23 17:38:26 9179

原创 获取android设备的各种系统信息

获取android设备的各种系统信息:TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);String imei = tm.getDeviceId();//移动设备国际辨识码String imsi = tm.getSubscriberId();//国际移动用户识

2017-03-20 10:23:19 1252

原创 Formatter(格式化)

简述:(格式化的概述)对于一般字符、数字的格式修饰的格式:%[argument_index$][flags][width][.precision]conversion        argument_index$:指定参数在参数列表中的位置        flags:修改输出的字符集,其值取决于conversion        width:指定输出字符的宽度        p

2017-03-17 12:07:35 829

原创 Animation动画属性详解

1.Android的animation由四种类型组成:XML中:alph渐变透明度动画效果scale渐变尺寸伸缩动画效果translate画面转换位置移动动画效果rotate画面转移旋转动画效果JavaCode中:AlphaAnimation渐变透

2017-03-16 09:56:11 794

原创 setBackgroundResource设置背景导致padding失效

修改前和修改后的图片对比: 修改的代码如下:TextView textView = (TextView)findViewById(R.id.text); int left = textView.getPaddingLeft(); int top = textView.getPaddingTop(); int right = textView.getP

2017-03-10 11:33:26 783

原创 git回退到某个历史版本

1. 在相应的工程目录下打开终端,使用Git log命令查看所有的历史版本,获取某个历史版本的id,假设查到历史版本的id是098477aa7f6093fa25fec918e940d90ac0ffc299。2. git reset --hard 098477aa7f6093fa25fec918e940d90ac0ffc2993. 把修改推到远程服务器git push -f -u o

2017-03-10 10:11:23 429

GifDemo.zip

Android中gif播放一般是比较耗内存的操作,Android中的ImageView不能直接播放gif,使用Java方式实现的gif播放的是非常耗内存的,就算是使用Glide这种优秀的三方库,也是一样的,所以项目中有gif播放需求,尤其是列表中有gif播放的,建议使用JNI的实现方式。

2020-11-26

Android自定义View实现QQ气泡效果

Android自定义View实现QQ气泡效果,手势拖动气泡,两条贝塞尔曲线,回弹动画,爆炸气泡效果实现。。。。

2020-11-19

微信、公众号扫码点餐源码

扫码点餐源代码.zip 公众号扫码点餐功能(附代码) 最近在做一个需求,也是公众号常用的功能-《扫码点餐》。 在店铺桌子贴一张固定二维码,用户扫码后进入公众号窗口①,推送模板消息(点餐消息)给用户②。 ① 用户已关注公众号,则到关注页面;已关注则直接进入公众号窗口。 ② 使用openId和模板消息id推送信息给用户。

2020-10-26

随机中文昵称库..xls

开发过程需要自定义用户名昵称,这里有10000多个用户昵称,包括中英文的,对随机生成昵称有非常大的帮助

2019-07-16

用户头像2000个.rar

开发过程需要自定义用户名和用户头像,这里有2000多个用户头像

2019-07-16

利用android studio生成jar包,制作自己的SDK

利用android studio生成jar包,制作自己的SDK.工程很简单,里面已经生成有jar包了

2018-04-16

Gallery 3D效果

这个Demo 主要演示了如何用Gallery来实现一个伪3D的UI.这个demo实现了类似iOS上面的CoverFlow功能。 主要有两个功能 1, 实现图片的倒影效果 2,重写gallery的一些方法实现Y轴上的旋转,Z轴上的缩放。

2017-08-04

Android群英传 pdf下载+源码

Android群英传 pdf下载并附带源码

2017-06-29

两台android设备间通过OTG-USB连接

这是通过usb-OTG实现两台android设备之间的通信,希望对大家有帮助.

2017-02-21

空空如也

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

TA关注的人

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