Android View如何绘制

上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行。只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画出这控件"性感"的外表。那么View又是如何进行绘制了?

  要了解View如何绘制,就需要了解canvas(画布)是什么?paint(画笔)能够做什么。

  Ⅰ、canvas就是表示一块画布,你可以在上面画你所朝思暮想的东西。当我们重写onDraw方法的时候,就能够拿到一个Canvas对象,这个就是你的舞台,画你所思所想。上代码了。

@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }

   当您需要对某某控件进行进行重新绘制的时候,我们只需要在这个大舞台(Canvas)调用Canvas.DrawXXX方法画出各种各样的图形。

  Ⅱ、paint就是画布上挥洒自如的画笔。要画图,得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Paint上提供许多属性和方法用来设置画笔。

  1、setAntiAlias: 设置画笔的锯齿效果。
  2、setColor: 设置画笔颜色
  3、setARGB:  设置画笔的a,r,p,g值。
  4、setAlpha:  设置Alpha值
  5、setTextSize: 设置字体尺寸。
  6、setStyle:  设置画笔风格,空心或者实心。
  7、setStrokeWidth: 设置空心的边框宽度。
  8、getColor:  得到画笔的颜色
  9、getAlpha:  得到画笔的Alpha值。

  我们既然知道了画笔与画布,通过一个短小精悍的例子来看画布和画笔怎么共同作用出一个想要的图形。老样子,上代码:

public class MyView extends View { private Paint paint; public MyView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { paint=new Paint(Paint.ANTI_ALIAS_FLAG); paint.setColor(Color.RED); paint.setStrokeWidth(5); paint.setTextSize(28); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureWidth(heightMeasureSpec)); } public int measureWidth(int measureSpec) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { result = 200; if (specMode == MeasureSpec.AT_MOST) { result = Math.min(specSize, result); } } return result; } @Override protected void onDraw(Canvas canvas) { canvas.drawText("中国", 0, 80, paint); super.onDraw(canvas); } }

上述代码,我们做了这么几件事了:

  Ⅰ、我们运用上篇文章的知识,重写了onMeasure方法,让这个简单自定义控件自适应wrap_content属性。

  Ⅱ、我们调用了OnDraw方法,拿到Canvas与paint,在view上写了"中国"文字。

  最终运行效果为:

  这就是我对Android View 如何绘制一点灼见,希望大家多提建议。

时间: 2024-08-01 04:43:56

Android View如何绘制的相关文章

Android View 如何绘制

上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行.只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画出这控件"性感"的外表.那么View又是如何进行绘制了? 要了解View如何绘制,就需要了解canvas(画布)是什么?paint(画笔)能够做什么. Ⅰ.canvas就是表示一块画布,你可以在上面画你所朝思暮想的东西.当我们重写onDraw方法的时候,就能够拿到一个Canvas对象,这个就是你的舞台,画你所思所

Android View如何绘制_Android

上文说道了Android如何测量,但是一个漂亮的控件我只知道您长到哪儿,这当然不行.只需要简单重写OnDraw方法,并在Canvas(画布)对象上调用那根五颜六色的画笔就能够画出这控件"性感"的外表.那么View又是如何进行绘制了? 要了解View如何绘制,就需要了解canvas(画布)是什么?paint(画笔)能够做什么. Ⅰ.canvas就是表示一块画布,你可以在上面画你所朝思暮想的东西.当我们重写onDraw方法的时候,就能够拿到一个Canvas对象,这个就是你的舞台,画你所思所

Android View底层到底是怎么绘制的

Android绘制链图: 网上很多讲Android  view的绘制流程往往只讲到了Measure - Layout - Draw. 但是,这只是一个大体的流程,而我们需要探讨的是Android在我们调用setcontentView()之后,系统给我们干了什么事情,这个完整的逻辑是什么样的,却很少有人讲,还是先看下系统代码吧. public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(l

Android自定义View之绘制音乐播放器示波器

周末玩的有点嗨,没更新博客了,今天补上,这个示波器是在大学的时候老师教的,但是出来工作一直没有用到过,渐渐的也就忘记了,现在重新学习一下.来看看效果图: 这里是一个自定义的柱状图,然后有一个按钮,点击按钮的时候,这里柱子会不停的运动,类似于音乐播放器里示波器的跳动. 跟前面几个自定义view的方式类似,重写了onSizeChange()方法和onDraw()方法  先列一下我们要用到的变量 Paint mPaint; mWidth; mRectWidth; mRectHeight; mRectC

android View与线程绘制一个小球沿轨迹运动

问题描述 android View与线程绘制一个小球沿轨迹运动 实现绘制一个小球,并运用线程的sleep使小球沿着一个圆运动如何实现 解决方案 先以你小球的位置记录下x,y 然后确定你要小球遇到的圆形的半径,还有圆心位置x1,y1 写个hander,定时post, 然后在handler 处理messge的函数中,做重绘你这个小球view的坐标(x,y). 看你要多久移动多少角度.通过圆心x1, y1 还有当前的小球位置x,y,然后把要移动的角度带进去,算一下这次移动小球新的位置x,y.然后就调用

Android View绘制的三大流程

本文讲的是Android View绘制的三大流程,View的工作流程主要是指measure.layout.draw这三大流程,即测量.布局和绘制,其中measure确定View的测量宽高,layout根据测量的宽高确定View在其父View中的四个顶点的位置,而draw则将View绘制到屏幕上,这样通过ViewGroup的递归遍历,一个View树就展现在屏幕上了.说的简单,下面带大家一步一步从源码中分析: Android的View是树形结构的: 基本概念 在介绍View的三大流程之前,我们必须先

android View层的绘制流程

还记得前面<Android应用setContentView与LayoutInflater加载解析机制源码分析>这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记得最终分析结果就是下面的关系: 看见没有,如上图中id为content的内容就是整个View树的结构,所以对每个具体View对象的操作,其实就是个递归的实现. 前面<Android触摸屏事件派发机制详解与源码分析一(View篇)>文章的3-1小节说过Android中的任何一个布局.任何一个控件其实都

13问13答全面学习Android View绘制_Android

本文通过13问13答学习Android View绘制,供大家参考,具体内容如下 1.View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view? 答:从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程.draw流程结束以后就可以在屏幕上看到view了.  2.view的测量宽高和实际宽高有区别吗? 答:基本上百分之99的情况下都是可以认为没有区别的.有两种情况,有区别.第一种 就是有的时候会因为某些原因 view会多次测量,那

13问13答全面学习Android View绘制

本文通过13问13答学习Android View绘制,供大家参考,具体内容如下 1.View的绘制流程分几步,从哪开始?哪个过程结束以后能看到view? 答:从ViewRoot的performTraversals开始,经过measure,layout,draw 三个流程.draw流程结束以后就可以在屏幕上看到view了. 2.view的测量宽高和实际宽高有区别吗? 答:基本上百分之99的情况下都是可以认为没有区别的.有两种情况,有区别.第一种 就是有的时候会因为某些原因 view会多次测量,那第