频道栏目
IT货架 > > 正文
Android自定义控件_Canvas分析
网友分享于:Jan 1, 1970 8:00:00 AM    来源: IT货架   
  自定义控件分为两种一种是自定义ViewGroup控件,一种是自定义View控件;跟踪View的步伐其实能跟到Java实现的最下面我们能发现的也就只有Canvas了,再下去就是C++或C实现了;所以本文主要是站在设计的的角度讲解一下Canvas跟View的关系,再简单分析一下Canvas用法;   View作为Android中一切显示视图的父类,我们可看到它的绘制方法draw(Canvas canvas)中,无非也是通过Canvas的绘制来达到各种View的显示,如此Android中各种控件如:ImageView,TextView,EditTextView等都是通过Canvas根据传递的各个参数绘制不同的视图,从而形成各种不同的视觉控件;当然我们也可以通过继承View的onDraw方法,用Canvas绘制一些自定义图像,这就是最简单的自定义控件了,当然如果需要各种事件响应,就需深刻了解View的事件处理逻辑。   这里做个简单的比喻:如果把一个Android界面比喻成窗户,那么每一个View就是一块玻璃,整个框架就是ViewGroup了,而每一块玻璃上的图案就是我们说的Canvas,如果没有Canvas我们是什么都看不到的(只有透明的玻璃),而接收各种事件处理还是由玻璃(View)接收处理,通知刷新图案就是(Canvas)了,这就是简单的View与Canvas的关系。很明显,它们分工很明确,View只需要负责处理事件交互,而Canvas只负责根据View提供的参数来显示与刷新图像。当然如果你要多个View同时显示那就需要VIewGroup参与了。下面学习一下Canvas的基本用法: Canvas基本用法分为两种:   1、直接在View的onDraw方法里面直接绘制;(这是有载体View(上面例子的玻璃)的情况下直接绘制图案,比如我们可以复写系统控件,根据需要再添加或修改我们需要的元素)   2、Canvas canvas = new Canvas(),这里仅仅是New的一个画布,我们是看不到的,它也无法处理任何事件,仅仅绘制修饰图像,至于显示与接收事件处理必须要有载体(View)才行; Canvas有很多自己的绘制方法,但是最终都是调用底层代码实现:下面分类介绍一下Canvas常用方法: 1、save,saveLayer,restore方法保存与还原; save(int saveFlags);可以指定还原哪些内容: 源码: // the SAVE_FLAG constants must match their native equivalents /** restore the current matrix when restore() is called */ public static final int MATRIX_SAVE_FLAG = 0x01; /** restore the current clip when restore() is called */ public static final int CLIP_SAVE_FLAG = 0x02; /** the layer needs to per-pixel alpha */ public static final int HAS_ALPHA_LAYER_SAVE_FLAG = 0x04; /** the layer needs to 8-bits per color component */ public static final int FULL_COLOR_LAYER_SAVE_FLAG = 0x08; /** clip against the layer's bounds */ public static final int CLIP_TO_LAYER_SAVE_FLAG = 0x10; /** restore everything when restore() is called */
相关板块推荐

广告服务联系QQ:1134687142 | 网站地图

版权所有: IT货架- 内容来自互联网,仅供用于技术学习,请遵循相关法律法规. 京ICP备11030978号-1