canvas教程

UI之画布Canvas的简单应用 引言(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-14 14:19 我要评论( )

在MainActivity中使用 @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);RelativeLayout layout=(RelativeLayout) fin

在MainActivity中使用

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RelativeLayout layout=(RelativeLayout) findViewById(R.id.main); layout.addView(new DrawGeometryView(this)); } 2.1 绘制简单几何图形

运行结果:

这里写图片描述

2.2 绘制闪烁变色的信号灯

定义显示闪烁的信号灯View

public { private int count=0; public SignalLightView(Context context) { super(context); setFocusable(true); setFocusableInTouchMode(true); } @Override protected void onDraw(Canvas canvas) { if(count<100){ count++; }else{ count=0; } Paint paint=new Paint(); paint.setStrokeWidth(3.0f); switch(count%4){ case 0: paint.setColor(Color.GREEN); break; case 1: paint.setColor(Color.RED); break; case 2: paint.setColor(Color.BLUE); break; case 3: paint.setColor(Color.YELLOW); break; default: paint.setColor(Color.WHITE); break; } canvas.drawCircle(80, 160, 50, paint);// 画圆,圆心的坐标(cx,cy)和半径radius }}

在MainActivity中使用信号灯

package cmo.learn.ui;import android.app.Activity;import android.os.Bundle;import android.widget.RelativeLayout;public Runnable{ @Override public void run() { while(!Thread.currentThread().isInterrupted()){ try { Thread.sleep(150); } catch (InterruptedException e) { e.printStackTrace(); } signalView.postInvalidate();//使得原来的View重绘即重新调用onDraw方法 } } }}

举第二个例子只是为了简单演示View的绘制即显示机制,正如前面所说的View的效果是在onDraw中完成的,那么onDraw除了系统自动调用执行以外,我们是否能自主去触发呢?答案是肯定的,其中一种方式就是通过调用invalidate方法(主线程中是通过invalidate方法;子线程里则是调用postInvalidate),只要我们主动去通过自定义View去调用invalidate方法致使Canvas失效,Android就会自动再去触发onDraw方法。

小结

深究下去,我们可以把这个Canvas看成Android系统提供给我们的一块内存区域(但其实质上只是一套绘图的API,真正的内存里保存的是Bitmap),而且它还提供了一整套对该内存区域进行操作的方法。这种方式根据环境还分为两种:一种就是使用普通View的Canvas画图,还有一种就是使用专门的SurfaceView的Canvas来画图。两者的区别在于可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏、播放视频等,高品质动画方面的绘图

  • 上一篇:关于ActionBar
  • 下一篇:cordova 环境搭建
  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Canvas与ValueAnimator

      Canvas与ValueAnimator

      2017-04-28 18:00

    • Canvas学习:绘制矩形

      Canvas学习:绘制矩形

      2017-04-24 17:02

    • Windows GDI和GDI+编程实例剖析

      Windows GDI和GDI+编程实例剖析

      2017-04-24 13:00

    • JavaScript Canvas绘制圆形时钟效果

      JavaScript Canvas绘制圆形时钟效果

      2017-04-21 09:04

    网友点评
    v