Android 自定义控件
众生回避
这个作者很懒,什么都没留下…
展开
-
自定义View-坐标转换
坐标转换默认情况下,画布坐标的原点就是绘图区的左上角,向左为负,向右为正,向上为负,向下为正,但是通过 Canvas ᨀ供的方法可以对坐标进行转换。转换的方式主要有 4 种:平移、旋转、缩放和拉斜:1)平移:public void translate(float dx,float dy)坐标平移,在当前原点的基础上水平移动 dx 个距离,垂直移动 dy 个距离,正负符号决定方向。坐标原原创 2017-03-27 14:53:15 · 393 阅读 · 0 评论 -
自定义View-剪切区
Canvas 提供了剪切区的功能,剪切区可以是一个 Rect 或者是一个 Path,两个剪切区还能进行图形运算,得到更加复杂的剪切区。我们来看看相关的方法:public boolean clipRect(Rect rect)public boolean clipRect(RectF rect)public boolean clipRect(float left,float top,fl原创 2017-03-27 13:50:44 · 298 阅读 · 0 评论 -
自定义View-Rect和RectF
Rect 类定义了一个矩形结构,同样实现了 Parcelable 序列化接口。Rect 类定义了 left、top、right、bottom 四个成员变量,我们需要正确理解这 4 个成员变量的作用:left:矩形左边线条离 y 轴的距离top:矩形上面线条离 x 轴的距离right:矩形右边线条离 y 轴的距离bottom:矩形底部线条离 x 轴的距离矩形是一种非常常见的图原创 2017-03-27 11:40:42 · 1572 阅读 · 0 评论 -
自定义View-Point类和PointF类
Point 类和 PointF 类:Point 类是一种最简单的结构,代表一个“点”,实现了 Parcelable 接口,支持序列化与反序列化。Point 类定义了两个 int 成员 x 和 y,代表点的 x 坐标和 y 坐标,图形坐标系与数学中的平面坐标系有所不同,x 方向向左为负,向右为正,y 方向向上向负,向下为正,图形坐标系的原点在左上角,这一点要特别注意,所以,默认情况下,当 x、y原创 2017-03-27 11:26:44 · 5141 阅读 · 1 评论 -
自定义View-Bitmap和BitmapDrawable
Bitmap 译为“位图”,用于存储 png、jpg、gif 等格式的图片数据,很多时候如果需要在 Android中对图片进行处理,需要先将图片读入 Bitmap 对象,接着调用相关的 API 对图片进行处理和加工,图片读取操作是由 BitmapFactory 类完成的,该类定义了若干方法用于读取图片数据:public static Bitmap decodeStream(InputStrea原创 2017-03-27 11:05:10 · 507 阅读 · 0 评论 -
自定义View-平滑滚动
TouchSlidingScreen:public class TouchSlidingScreen extends ViewGroup { //平滑滚动中要用到Scroller private Scroller scroller; //最小滑动距离,超过了才认为开始滑动 private int touchSlop = 0; //停止状态 p原创 2017-03-24 17:54:08 · 999 阅读 · 0 评论 -
Scroller和平滑滚动
Scroller 类在滚动过程的的几个主要作用如下:启动滚动动作;根据ᨀ供的滚动目标位置和持续时间计算出中间的过渡位置;判断滚动是否结束;介入 View 或 ViewGroup 的重绘流程,从而形成滚动动画。Scroller涉及到的方法:public Scroller(Contextcontext)public Scroller(Contextcontext原创 2017-03-24 11:36:40 · 399 阅读 · 0 评论 -
自定义ViewGroup-自定义LayoutParams支持显示方位
自定义属性: 方位包含 4 个方向:左上角、右上角、左下角、右下角,在 attrs.xml 文件中,定义一个名为layout_position 的属性,类型为 enum,枚举出这 4 个值。activity_ma原创 2017-03-23 17:00:09 · 1452 阅读 · 0 评论 -
自定义ViewGroup-外边距Margin
如果要考虑 margin,则将影响以下几个方面:1)影响 onMeasure()方法测量的容器尺寸;2)影响 onLayout()方法对子组件的定位;3)必须为子组件ᨀ供默认的 MarginLayoutParams(或其子类)。向容器添加子组件时,需要调用 addView()方法,该方法有几个重载版本,如果调用 publicvoid addView(Viewchil原创 2017-03-23 16:05:13 · 1226 阅读 · 0 评论 -
自定义ViewGroup-通过内边距加深理解
读取 4 个方向的 padding: public int getPaddingLeft () 离左边的 padding public int getPaddingRight () 离右边的 padding public int getPaddingTop () 离顶部的 padding public int getPaddingRight () 离底部的 padding原创 2017-03-23 15:51:06 · 303 阅读 · 0 评论 -
自定义ViewGroup
ViewGroup 运行的基本流程大致为:1) 测量容器尺寸重写 onMeasure()方法测量容器大小,和自定义组件有所区别的是,在测量容器大小之前,必须先调用 measureChildren()方法测量所有子组件的大小,不然结果永远为 0。2) 确定每个子组件的位置重写 onLayout()方法确定每个子组件的位置(这个其实挺麻烦,也是定义容器的难点部分),在 on原创 2017-03-22 15:33:45 · 248 阅读 · 0 评论 -
自定义View之(包含自定义属性)
我们想自定义View,只需按照以下几步进行即可:1)自定义一个View,继承View或者View的子类(如TextView,非ViewGroup)2)在View的方法中获得我们自定义的属性(如果需要自定义属性的话)3)重写onMeasure(此方法非必写,大多数情况下还是需要重写的)4)重写onDraw注:自定义View只需重写onMeasure和onDraw1原创 2017-01-22 21:15:29 · 209 阅读 · 0 评论 -
自定义View-invalidate和postInvalidate
invalidate()方法重绘组件public void invalidate()public void invalidate(int l,int t,int r,int b)public void invalidate(Rect dirty)带参数:重绘整个视图区域不带参数:重绘指定的区域如果要刷新组件或者让画面动起来,我们只需调用 invalidate () 方法即可。通过改原创 2017-03-22 17:00:05 · 514 阅读 · 0 评论 -
自定义View-Paint和Canvas
Paint类:1)和颜色相关颜色是指绘图时使用的颜色,在 Android 中颜色可以指定透明度,使用 16 进制来表示颜色时,格式通常为#AARRGGBB,其中,AA 表示透明度、RR 表示红色、GG 表示绿色、BB 表示蓝色,Color 类定义了颜色信息,内置了常用颜色的 int 型常量,比如 Color.RED 是红色,Color.BLUE 是蓝色……如果您习惯了 16 进制的颜色,C原创 2017-03-22 16:01:12 · 230 阅读 · 0 评论