android
文章平均质量分 82
forward123_
这个作者很懒,什么都没留下…
展开
-
Android自定义View——自定义样式
上一节《Android自定义View——可设置形状(圆形、圆角矩形)的ImageView,抗锯齿》讲解了第一个自定义View,现在以上一节的例子讲解自定义样式的使用,方便在xml布局文件中直接设置自定义View的属性。首先在res/values/目录下创建attrs.xml(文件名可自定义),内容如下:原创 2016-01-21 10:56:29 · 1341 阅读 · 0 评论 -
View的绘制流程
View绘制的三大流程主要指:measure(测量)、layout(布局)、draw(绘制)。measure过程中确定View的尺寸(即宽高),layout过程中确定View的位置(即上下左右的位置),draw过程确定View显示的内容。在开发中,通常都是在Activity的onCreate()中调用setContentView(R.layout.custom_layout)来实现想要的页面布局。...原创 2017-08-31 16:59:32 · 2209 阅读 · 0 评论 -
Android获取输入法高度——输入法与页面布局无缝切换
在QQ或者微信的聊天页面,当输入法和表情栏互相切换时,过度非常自然,而且表情栏高度刚好跟输入法一样。个人感觉这种用户体验特别的好,别看这个细节小,但代码实现处理起来还是有一定难度。今天我就带大家来实现这种效果,下面是效果图:首先,我们需要知道输入法的高度,使表情栏的高度与之保持一致。但是Android是没有提供现成的接口给开发者监听输入法的状态,因此需要自定义的Keyboard原创 2016-08-04 20:24:56 · 14922 阅读 · 3 评论 -
Android仿手机QQ空间动态评论,自动定位到输入框
手机QQ空间浏览好友动态时,可以直接对动态评论,点击某条评论,动态列表自动滚动,使输入框刚好在该评论下面,而不会覆盖住评论内容。如下图所示,首先要实现输入框刚好在输入面板上面,且动态列表不会被挤上去。可以使用对话框的形式,这样输入框不会影响原有的布局,弹出的对话框布局如下所示,点击EditText时,红色块的内容将位于输入法上面。在这里我把ScrollerView的背景设为透明。其实QQ空间的输入...原创 2016-04-14 18:32:31 · 12390 阅读 · 24 评论 -
如何快速阅读并分析Android源码
很多时候为了解决一个问题必须先理解Android系统的运行原理,这时候就得阅读应用层框架的源码。学会阅读系统源码或者他人的代码,这是研发必备的技能之一,只有了解别人写的东西才能在他之上更好的行事,同时也能去学习和借鉴他人优秀的代码思想。那么,如何阅读并分析Android源码呢?这里我只讲一些初级的、基础的方法,很快就可以上手,不需要下载和编译系统源码。我们下载Android SDK的时...原创 2018-04-19 19:02:06 · 8477 阅读 · 6 评论 -
Android涂鸦框架Doodle——仿微信图片编辑(多功能画板)
前言很久之前做了一个叫Graffiti的涂鸦项目,放在了github上,得到了不少朋友的反馈,也一直有去维护。限制于个人能力水平,一开始并没有过多考虑框架的问题,导致越到后面,代码越臃肿,添加新功能也越复杂,难于拓展。(自己代码,哭着也要写完~~)在经过了一段时间的历练后,终于意识到了项目框架的重要性,代码重构必不可少。于是,克服了种种困难,终于完成了代码重构!功能强大、可自定义和可扩展的...原创 2018-07-26 11:22:30 · 11589 阅读 · 18 评论 -
android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(二)
该项目的代码已经重构,采用了新框架,强烈建议查看《Android全新图片涂鸦框架Doodle——多功能、可自定义、可扩展》(旧代码暂时不维护了,所以推荐还是使用最新框架吧!也希望大伙支持!!!)点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle...原创 2016-10-14 17:38:36 · 9873 阅读 · 26 评论 -
android图片涂鸦——旋转与文字功能的实现原理
该项目的代码已经重构,采用了新框架,强烈建议查看《Android全新图片涂鸦框架Doodle——多功能、可自定义、可扩展》(旧代码暂时不维护了,所以推荐还是使用最新框架吧!也希望大伙支持!!!)点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle...原创 2017-03-20 16:49:00 · 5062 阅读 · 5 评论 -
Android涂鸦画板原理详解——从初级到高级(一)
准备前段时间,发布了多功能画板&开源涂鸦框架Doodle,得到了一些小伙伴的关注。但由于框架代码较多,一开始较难理解,有不少人询问了相关的实现细节。我发现不少初学者对基本的涂鸦原理不熟悉,因此我决定写一些简单的例子,用于说明最基本的的涂鸦原理,这也是多功能画板&开源涂鸦框架Doodle最核心的地方。好的,在讲解之前,我希望小伙伴们对View的绘制流程有一定的了解,还不熟悉的...原创 2018-09-14 17:00:25 · 16829 阅读 · 16 评论 -
从显示一张图片开始学习OpenGL ES
前言网上很多介绍OpenGL ES的文章,但由于OpenGL ES内容太多,所以这些文章难免过于臃肿杂乱,很难抓住重点,对于初学者来说最后还是云里雾里。很多人(包括笔者本人)开始深入了解OpenGL ES是因为其涉及到实时滤镜的应用,通常都会参考开源框架GPUImage的实现。如果没有掌握基本的OpenGL Es的开发知识,很难弄懂其中代码缘由。目前很流行的短视频特效处理也有涉及到Open...原创 2018-09-20 15:51:59 · 13615 阅读 · 1 评论 -
Android涂鸦画板原理详解——从初级到高级(二)
前言前面写了《Android涂鸦画板原理详解——从初级到高级(一)》,讲了涂鸦原理初级和中级的应用,现在讲解高级应用。如果没有看过前面一篇文章的同学,建议先去看看哈。准备高级涂鸦涉及到图片操作,包括对图片进行缩放移动、涂鸦等,这里涉及到矩阵的变换。关于矩阵变换的知识,请查看我的另一篇文章《浅谈矩阵变换——Matrix》。根据文中的介绍,接下来使用变换坐标系的空间想象去理解涂鸦中涉及到的矩阵变...原创 2018-10-26 19:58:14 · 6111 阅读 · 5 评论 -
在规定区域内自动调整文字位置
问题最近在做一个需求,就是涂鸦时,在绘制的图形旁边通过文字显示相关信息.先给大家看看最终的效果:一开始的时候被这个问题难倒了,怎么找到合适的位置显示文字信息,让它们既不超出显示范围,又互不重叠?解决方案如果考虑不能重叠的问题,就需要在图形四周的位置遍历一遍直到没有跟其他文字重叠,加上绘制的图形是可以移动问题,这样问题就更复杂了.于是我只能简单化,寻找代价低又基本能满足要求的方式.首先,...原创 2019-01-31 20:26:31 · 1113 阅读 · 0 评论 -
Android支持多行文本省略Ellipsize
根据关键字省略有时候我们需要根据关键字省略内容,比如微信搜索聊天记录时会在关键字的前后进行省略.处理方式和逻辑见如下代码和注释:private static void ellipsizeByKeyword(final TextView textView, String content, String keyword, boolean ignoreCase) { TextPa...原创 2019-02-23 15:12:48 · 1687 阅读 · 0 评论 -
Android文本过长时根据关键字省略内容Ellipsize
有时候我们需要根据关键字截断文本内容,省略多余部分,比如微信搜索聊天记录时会在关键字的前后进行截断.处理方式和逻辑见如下代码和注释:private static void ellipsizeByKeyword(final TextView textView, String content, String keyword, boolean ignoreCase) { TextP...原创 2019-03-06 11:09:56 · 532 阅读 · 0 评论 -
类似微信首页弹性滚动和惯性滚动效果的实现——OverScroll
OverScroll利用CoordinatorLayout+Behavior实现列表弹性滚动和惯性滚动效果(类似微信首页),支持水平和垂直方向的滚动,效果如下:Usage 用法Gradleallprojects { repositories { ... maven { url 'https://jitpack.io' } }} d...原创 2019-03-16 17:30:10 · 1176 阅读 · 0 评论 -
OverScroll弹性滚动和惯性滚动效果的实现原理——CoordinatorLayout+Behavior
前面介绍了OverScroll的使用,没看过文章的同学可以先了解下《类似微信首页弹性滚动和惯性滚动效果的实现——OverScroll》接下来介绍OverScroll的实现原理。CoordinatorLayoutCoordinatorLayout是在Support 包中功能强大的布局容器,它本质是一个 FrameLayout,然而它允许开发者通过自定义Behavior协调各个子view,实现各...原创 2019-04-02 11:28:30 · 2596 阅读 · 0 评论 -
涂鸦框架的优化——解决绘制时的卡顿问题,纵享丝滑
前言喜大普奔,涂鸦框架Doodle迎来重大更新!V5.5: 增加优化绘制的选项,可优化绘制速度和性能,纵享丝滑。真是太不容易了!其实在很早之前,笔者就已经感受到涂鸦时的卡顿,特别是随着涂鸦越多卡顿越明显,奈何当时心有余而力不足,一直找不到最佳的解决方法。直到最近灵感爆发,终于解决之,纵享丝滑!问题的初步解决当涂鸦越来越多时,操作时的卡顿越明显,同时也导致涂鸦的轨迹不够圆滑。初步分析是因...原创 2019-04-11 15:20:47 · 3174 阅读 · 5 评论 -
瓦片地图加载框架——TiledMapView
有幸参与过一个简易地理信息系统(GIS)的开发,学到了不少地理信息相关的知识,便想要开发一个关于瓦片地图加载的开源库,跟大家一起分享交流。TiledMapViewAndroid瓦片地图加载,支持多种投影,包括Web墨卡托投影,经纬度直投及自定义投影等;支持定位,添加图层和覆盖物。用法Gradleallprojects { repositories { ......原创 2019-04-25 11:30:54 · 2486 阅读 · 1 评论 -
Android事件分发机制(一)
当手指触摸屏幕后会产生一系列的事件(如点击DOWN、移动MOVE、抬起UP等),事件的信息记录在MotionEvent(手势事件)对象中。这里说的事件分发机制,其实指的是MotionEvent的分发过程。当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View(ViewGroup继承自View),这个传递的过程就是事件分发过程。在这里先明确的说一下,当我们点击一个View...原创 2017-08-29 15:29:33 · 635 阅读 · 1 评论 -
浅谈矩阵变换——Matrix
矩阵变换在图形学上经常用到。基本的常用矩阵变换操作包括平移、缩放、旋转、斜切。每种变换都对应一个变换矩阵,通过矩阵乘法,可以把多个变换矩阵相乘得到复合变换矩阵。矩阵乘法不支持交换律,因此不同的变换顺序得到的变换矩阵也是不相同的。事实上,图像处理时,矩阵的运算是从右边往左边方向进行运算的。这就形成了越在右边(右乘)的矩阵,越先运算(先乘),反之亦然原创 2017-09-05 00:33:14 · 44809 阅读 · 3 评论 -
android YUV转RGB
在百度找到了YUV转RGB的方法,但fax原创 2014-09-14 01:09:05 · 1790 阅读 · 1 评论 -
Android库工程及代码混淆(project.properties、proguard-project.txt)
在Android开发中,许多项目是作为库(library)工程被其他项目引用。在eclipse中,右键项目名称点击进入“属性(properties)”,点击“Android”,在设置面板上勾选“is library“,可以项目设置为库工程。同时在相同设置面板上可以引入其他工程。设置成功后,查看项目目录下的project.properties文件,会发现如下的内容:target=an原创 2016-01-06 10:18:22 · 1710 阅读 · 0 评论 -
Android自定View——可以设置宽高比例的ImageView
如果对android自定义view还不太属性,可以查看我之前写的文章《Android自定义View——基础知识篇》在App中展示最多的除了文字外,应该就是图片了。为了适配屏幕,有些情况下在布局时图片大小是不固定的,如下图:中间是三张图片(ImageView),图片左右两边的间距都已经确定,但图片大小不确定。可以看出三张图片占用剩下的空间,这里可以用LinearLay原创 2016-01-28 13:43:44 · 9387 阅读 · 0 评论 -
形象讲解Android中dpi,dp和px之间的关系(设计师如何与程序员沟通)
屏幕尺寸指屏幕(显示屏)对角线的长度,单位为英寸。dpi(dots per inch 像素密度)指每英寸中的像素数.(1)在android中,160dpi设备下,1px = 1dp,160dpi表示一英寸中包含160个像素点(px),即把一英寸平均分成160个单元格,每个单元格就有一个像素。如果我们把这160个单元格的单位设为dp,则1dp=1px;(2)假设我的设原创 2016-01-13 23:21:16 · 1006 阅读 · 0 评论 -
Android自定义View——可设置形状(圆形、圆角矩形、椭圆)的ImageView,抗锯齿
(如果对自定义View不太熟悉,可以查看上篇文章《Android自定义View——基础知识篇》)有时显示的图片(如用户头像)是圆形或者圆角矩形的,如果我们把每一种形状的图片都裁剪成一个图片文件,这样既麻烦也浪费空间,所以最好的办法是通过代码来设置图片的显示形状。显示图片用到的是ImageView,最简单的设置图片形状的方法就是在onDraw()里面通过canvas.原创 2016-01-20 15:22:26 · 11087 阅读 · 0 评论 -
解决ViewPager设置切换动画PageTransformer后子页无法触摸的问题
通过ViewPager.setPageTransformer()方法可以设置切换动画,但是如果ViewPager的子页中要处理触摸事件,如浏览图片时对图片放大缩小,ViewPager切换子页后,不能处理触摸事件,似乎子页里面的变的不可点击。尝试了很多中Google上的方法,仍不能解决问题。其实这个是android4.1+版本上的bug,在调用了setPageTransformer()方法后,切换子原创 2016-04-05 15:56:45 · 3005 阅读 · 5 评论 -
Android自定义View——可在背景图和前景图显示遮罩效果的ImageView
设置背景图或前景图的遮罩,而且遮罩范围可以设置为整张图片或非透明部分,另外,还可以设置遮罩的颜色。原创 2016-01-22 11:05:22 · 13018 阅读 · 1 评论 -
Android属性动画封装之快速构建动画
Android实现动画效果的方式主要有帧动画、补间动画、属性动画。关于安桌动画的基础知识可以查看这篇文章 Android属性动画完全解析这里我要讲的是如何快速构建出一个动画效果,如下图:如果我们用属性动画实现,其中点击男性头像后的动画效果的代码如下:// 男生头像移到上面,水平居中 float centerX = -mPortraitMale.g原创 2016-03-11 15:04:45 · 2047 阅读 · 0 评论 -
Android自定义View——基础知识篇
自定义View的实现方式大概可以分为三种,自绘控件、组合控件、以及继承控件。每一个view的绘制过程都经历三个主要的阶段,测量(measure)、布局(layout)及绘制(draw),在自定义view时,我们主要关注这三个阶段分别对应的onMeasure()、onLayout()及onDraw().onMeasure(widthMeasureSpec, heightM原创 2016-01-19 22:43:50 · 1482 阅读 · 1 评论 -
Ubuntu下录制屏幕并转换成gif
1)打开Ubuntu软件中心,分别安装RecordMyDesktop,GNOME MPlayer和ImageMagick。2)安装之后,打开RecordMyDesktop,点击选择窗口,也可以在任务栏上右键该应用的图标(红点),点击“选择区域”,更加精确地选择录制区域(必须回到桌面才能选择)。选择好录制区域和录制信息后,点击“录制”,开始录制屏幕。在任务栏上右键该应用的图标可以停止或暂停录制。原创 2016-01-05 17:56:25 · 3950 阅读 · 0 评论 -
Android自定义View——可拖拽的ListView
有时时候需要对ListView的Item进行手动拖拽排序,如安桌系统中的对通知栏的开关排序,因此需要自定义一个可拖拽的ListView,效果如下:使用gradle:allprojects { repositories { ... maven { url 'https://jitpack.io' } }}dependenc...原创 2016-08-03 15:27:59 · 4531 阅读 · 4 评论 -
Android资源文件匹配规则及屏幕适配方案
在运行时,Android系统会根据当前的设备设置自动寻找合适的资源。为不同的设备提供不同的资源,主要是利用特殊命名的资源文件夹来实现的。 资源文件命名:Android工程res目录下资源文件的命名格式:资源名-属性1-属性2-属性3-属性4资源名的取值有:drawable, values, layout, anim, raw, menu, color, animator等 各属...原创 2016-04-20 16:19:32 · 2540 阅读 · 0 评论 -
android图片涂鸦,具有设置画笔,撤销,缩放移动等功能(一)
该项目的代码已经重构,采用了新框架,强烈建议查看《Android全新图片涂鸦框架Doodle——多功能、可自定义、可扩展》(旧代码暂时不维护了,所以推荐还是使用最新框架吧!也希望大伙支持!!!)点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle点击移步到最新涂鸦框架>>>Doodle...原创 2016-09-25 15:19:29 · 13919 阅读 · 39 评论 -
Android自定义view——滚动选择器
首先介绍android.widget.Scroller类。Scroller 封装了滚动相关的操作。你可以使用Scroller获取可以产生滚动效果的数据;例如,在响应一个滑动手势时,Scroller会帮你计算滚动偏移量,你可以根据获取的偏移量来设置你的view的位置,从而实现滚动效果。 主要方法有:startScroll(int startX, int startY, int dx,原创 2016-03-10 16:40:30 · 8776 阅读 · 8 评论 -
android图片滚动选择器的实现
图片选择器的实现,以及通过选择器实现老虎机效果。 老虎机提供了三种图片绘制模式:填充、居中、指定大小。原创 2017-04-15 18:02:28 · 5058 阅读 · 0 评论 -
Android滚动选择器——水平滚动
前言前面我们讲解了滚动选择器的实现原理,并实现了字符串滚动选择器和图片选择器。没看过的同学建议先去了解一下: 《Android自定义view——滚动选择器》 《android图片滚动选择器的实现》这些滚动选择器的滚动方向都是垂直的。今天我们在此基础上增加可以水平滚动的选择器。效果如下: 实现对父类ScrollPickerView进行改进,参照垂直滚动,添加跟水平滑动相关的变量。 private原创 2017-06-13 18:24:03 · 12457 阅读 · 11 评论 -
Android消息机制基本原理
先看一段程序,在主线程里面开启了无限循环,处理消息队列里面的消息。public class Test { private static BlockingQueue<Message> messageQueue; // 阻塞队列 public static void main(String[] args) throws InterruptedException { messag原创 2017-08-27 18:01:04 · 620 阅读 · 0 评论 -
Androids——日常开发工具和组件集合
AndroidsAndroids是本人根据平时的项目实践经验,为了提高Android开发效率而写的一个工具SDK;里面提供了一些工具类以及自定义View,可在实际项目开发时直接使用。使用allprojects { repositories { ... maven { url 'https://jitpack.io' } }}depend...原创 2019-06-19 14:44:41 · 1831 阅读 · 3 评论