闲聊自定义控件
文章平均质量分 85
从基础入手,对自定义控件相关的知识点进行讲解,同时配以实战项目,加深知识理解!
白云朵朵飞
这个作者很懒,什么都没留下…
展开
-
闲聊自定义控件之基础——坐标
坐标是自定义控件的基础,例如在处理事件点击、滚动、动画等很多情况时都需要坐标的相关知识。Android坐标与数学中的相差不大,主要使用两种方式进行描述:绝对坐标和相对坐标。Android的坐标系是以屏幕的左上角为原点,向下为X的正方向,向右为Y 的正方向(如下图所示)。相当于数学坐标系,以屏幕左上角为原点,顺时针旋转90度。Android坐标系使用相对坐标的情况较多,绝对坐标较少,且相...原创 2018-05-04 17:59:37 · 1575 阅读 · 0 评论 -
闲聊自定义控件之基础——Color
提到Color大家都很熟悉,不就是ARGB嘛。其实,除了这些基本的东西之外,有些知识点还是需要稍微注意一下的。下面带大家一起复习下与Color相关的知识。ARGB分别是透明度(alpha)、红(red)、绿(green)、蓝(blue)。在ARGB_8888模式下它们的取值范围是0-255,也就是ox00到oxff,因此每一个颜色通道占8位即1个字节,也就是说一个像素点需要4个字节来表示。...原创 2018-04-28 18:16:23 · 1567 阅读 · 0 评论 -
闲聊自定义控件之基础——Path
Path在自定义控件里的使用频率也相当的高,使用Path不仅能绘制矩形、圆形等常规图形,还能绘制比较复杂的组合路径。基本方法点的相关操作moveTo:移动到哪一点lineTo:连接到哪一点rMoveTo:移动到哪一点(参考点为当前点)rlineTo:连接到哪一点(参考点为当前点)setLastPoint:设置终点位置close:连接开始的点和末尾的点,使路径闭合...原创 2018-05-14 15:15:49 · 1668 阅读 · 0 评论 -
Path 综合实战——滑雪
Path是自定义控件中非常重要的一部分,上一篇闲聊自定义控件之基础——Path中介绍了Path相关的基础知识,今天通过一个滑雪的demo,演示下Path相关API的使用。该demo用到的Path的知识点主要有贝塞尔曲线、Path逻辑运算、PathMeasure等,这些都是常用的,而且比较重要的知识点。 闲话少说,先看效果图: 1.首先是初始化的操作private void in...原创 2018-05-23 20:24:56 · 1651 阅读 · 2 评论 -
闲聊自定义控件之基础——Paint
下图是paint中所有有关set的方法,基本涵盖了paint的所有用法。本篇文章介绍的内容基本上就是图片里的方法,为了便于介绍对这些方法进行了简单的分类整理。基础应用图形绘制相关 mPaint.reset();//重置 mPaint.setColor(Color.RED);//设置画笔颜色 mPaint.setAlpha(255...原创 2018-06-13 16:21:15 · 1450 阅读 · 0 评论 -
Paint实战——圆角图片
圆角图形在android的开发中非常常见,也有多种实现方式,今天主要演示两种使用paint相关的API来完成图形圆角裁剪的过程。主要用的知识点为BitmapShader和Xfermode,这两个类前面已经有所介绍(闲聊自定义控件之基础——Paint),大家可以对照理解一下。之所以使用这两种方式,一方面是为了补足上一篇讲述paint的博客中缺乏对高级应用的实战,另一方面也是非常重要的一方面是因为这两...原创 2018-06-15 14:35:14 · 2841 阅读 · 0 评论 -
闲聊自定义控件之基础——Canvas
前面介绍过了有关绘制的基础知识,包括Color、坐标、Path、Paint等,今天主要梳理下Canvas的相关知识点。Canvas一般称为画布,但其实它只是一套画图的API,使用这些API可以对内存进行操作,进而画出想要的图形。打开android.graphics包下的Canvas类,可以看到其内部提供的方法还是比较多的,为了便于理解,对方法进行分类总结。绘制操作绘制的主要方法如下...原创 2018-06-27 14:55:20 · 1480 阅读 · 0 评论 -
Canvas综合实战——沙漏
Canvas其实在前面的几篇博客中都有过使用,但这些使用一般集中在绘制和画布变化方面,画布的快照和裁剪应用很少。下面通过一个沙漏实例演示下这两部分的使用 效果图: 说是沙漏确实有点勉强.没有美工支持,只好从老项目里扒出来两张不同颜色填充的颜色来应付。重在实现过程,希望有强迫症的同学能够理解一下哈。主要实现过程分为两部分 1. 自定义一个Drawable,实现两张图片的拼接。 2. ...原创 2018-06-27 16:06:48 · 2229 阅读 · 1 评论 -
Activity加载UI流程
activity加载UI直观的起始位置是activity的setContentView方法,进入该方法看到实现如下:public void setContentView(int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar(); }...原创 2018-07-12 15:37:22 · 1980 阅读 · 0 评论 -
闲聊自定义控件之View绘制
了解View的绘制对自定义控件的开发有着重要的意义,上一篇已经对activity加载UI的流程进行了讲解,从中可以看出DecorView是我们的最外层View,是一个FrameLayout的子类,View的绘制也是从DecorView开始的。 DecorView调用performTraversals()方法开始View的绘制,这个方法内容比较多,比较核心的是调用如下方法: - perfor...原创 2018-07-13 16:35:22 · 1123 阅读 · 0 评论 -
View绘制实战——热门标签
上一篇文章已经对View绘制的流程进行了讲解,并用其解决了ListView的嵌套问题。今天我们再次通过热门标签这种常用的自定义控件来演示View绘制的综合运用。本篇文章讲了热门标签这一简单自定控件的三种实现。其中,前两种基于onMeasure、onLayout方法,最后一种基于LinearLayout布局。这样做的目的是在加强对View绘制理解的同时,注意实现过程的多样性,增强对知识的灵活...原创 2018-07-18 17:07:57 · 1310 阅读 · 0 评论 -
闲聊自定义控件之事件分发
Android的事件分发机制相较前面的知识点有点复杂,之所以有这种感觉是因为这部分的源码阅读需要一定的耐心,要属于剔除“非核心”代码的影响。特别是在高版本的API中,为了更好的体验,增加了大量代码,但这些代码对整个事件的流向是没有影响的。另外,事件分发机制在View和ViewGroup中有不同的表现,父布局和子View之间有一定的关联性,这种关联性根据方法返回值不同又多种多样。这些都对事件分发机制...原创 2018-07-27 10:24:32 · 1381 阅读 · 0 评论 -
事件分发实战——滑动冲突
滑动冲突非常的常见,可能刚开始接触的时候确实有点让人摸不着头脑,但分析总结之后就会发现还是有一定的规律可循。滑动冲突解决的关键点在于对事件分发机制的理解,对于事件的分发机制,上一篇文章(闲聊自定义控件之事件分发)已经对其进行了介绍,如果对该知识点缺乏了解的话建议先读一下上篇文章。滑动冲突的分类滑动冲突一般分为两类,内外部滑动方向一致、内外部滑动方向不一致。至于由它们嵌套或者平行组合...原创 2018-08-03 17:55:52 · 1405 阅读 · 0 评论 -
闲聊自定义控件之View滑动
Android的滚动(滑动)有很多种实现方式,如动态改变布局参数,属性动画,Scroller等。这些方式大多是通过View的坐标改变来实现的。布局参数相关实现方式这一部分主要包括layout()方法以及设置LayoutParams两种方式。layout()方法实际就是直接控制View坐标的四个点来实现的,上一篇文章(闲聊自定义控件之滑动冲突)中就是使用的这种方式。具体如下:case Mot...原创 2018-12-14 20:18:27 · 1055 阅读 · 0 评论