Android 绘图机制:canvas初解

转载请注明转自:noyet12的博客

博客原址:http://blog.csdn.net/u012975705/article/details/49992947

Canvas 即“画布”的意思,在Android中用其来进行2D绘画。

在使用canvas来进行绘图时,一般都会自定义一个View来重写它的onDraw方法:

public class CustomCanvas extends View {
    public CustomCanvas(Context context) {
        super(context);
    }

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

既然是绘图,自然就少不了画笔:Paint,canvas通过借用paint来绘制图像。

canvas中,有rotate、scale、translate等方法即旋转、缩放、平移,对于这几个方法必须注意:操作对想象是画布,发生旋转、缩放、平移的是画布,并且使用canvas绘制时其中的坐标参数是相对于画布的而不是相对于屏幕本身。单通过语言可能不太好理解,下面给出实例。

CanvasDemo:

第一步 自定义View并重写onDraw方法

package com.noyet.practice.canvasdemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.view.View;

/**
 * package: com.noyet.practice.canvasdemo
 * Created by noyet on 2015/11/23.
 */
public class CustomCanvas extends View {

    private Paint mPaint;
    private RectF mRect;

    public CustomCanvas(Context context) {
        super(context);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setColor(Color.RED);
        mRect = new RectF(100, 100, 150, 150);
        canvas.drawRect(mRect, mPaint);
//        canvas.save();
        canvas.scale(2f, 2f);
        canvas.rotate(10, 100, 100);
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(mRect, mPaint);
//        canvas.restore();
    }
}

第二步 在屏幕中显示出来

package com.noyet.practice.canvasdemo;

import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new CustomCanvas(this));

    }
}

绘制结果:

从图中可以看到,当调用canvas.scale(2f, 2f)方法和,连坐标的时间权重都是原来的2倍了

时间: 2024-10-13 15:22:14

Android 绘图机制:canvas初解的相关文章

Android绘图机制(一) View类

对android绘图机制的理解,在Android学习中可谓至关重要,包括自定义控件也是使用非常频繁的内容.最近在项目中遇到一个比较棘手的问题,项目中好几个模块都用到ListView或者GridView的”下拉刷新,上拉加载更多“功能 .一开始在网上找了大牛写的作品,用在项目中后发现时不时会出现卡壳的现象,改进以后会有所改善,不过还是感觉有所欠缺.无奈我是个处女座菜鸟,尝试着找出这些问题的根本原因却发现无从下手,所以先补补基础.( 纯文字看着确实很费劲,所以顺便引用下其他的文章)  概述 View

android 绘图之Canvas,Paint类

Canvas,Paint 1.在android 绘图但中经常要用到Canvas和Paint类,Canvas好比是一张画布,上面已经有你想绘制图画的轮廓了,而Paint就好比是画笔,就要给Canvas进行添色等操作. 这两个类通常都是在onDraw(Canvas canvas)方法中用的. 2.Bitmap:代表一张位图,BitmapDrawable里封装的突变就是一个Bitmao对象 3.Canvas里面有一些例如: drawArc(参数) 绘制弧 drawBitmao(Bitmap bitma

第三章 Android绘图机制与处理技巧

1.屏幕尺寸信息 屏幕大小:屏幕对角线长度,单位“寸”:分辨率:手机屏幕像素点个数,例如720x1280分辨率:PPI(Pixels Per Inch):即DPI(Dots Per Inch),它是对角线的像素点数除以屏幕大小得到的:系统屏幕密度:android系统定义了几个标准的DPI值作为手机的固定DPI.(注,最后一个有笔误,正确的是1080x1920)独立像素密度(DP):android系统使用mdpi屏幕作为标准,在这个屏幕上1dp=1px,其他屏幕可以通过比例进行换算.在hdpi中,

Android群英传知识点回顾——第六章:Android绘图机制与处理技巧

6.1 屏幕的尺寸信息 6.1.1 屏幕参数 6.1.2 系统屏幕密度 6.1.3 独立像素密度dp 6.1.4 单位转换 6.2 2D绘图基础 6.3 Android XML绘图 6.3.1 Bitmap 6.3.2 Shape 6.3.3 Layer 6.3.4 Selector 6.4 Android绘图技巧 6.4.1 Canvas 6.4.2 Layer图层 6.5 Android图像处理之色彩特效处理 6.5.1 色彩矩阵分析 6.5.2 Android颜色矩阵--ColorMatr

Android 绘图(二) Canvas

上篇文章,我们讲述了Paint(画笔)类的.如果你还未了解,那么可以先看看这篇文章,Android 绘图(一) Paint.今天这篇文章,我们来看看Canvas.Canvas 是画布,来响应绘画(Draw)的调用(并将其写入Btmap). 我们先看看官方文档对Canvas的描述: The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hol

Android绘图机制与处理技巧

一屏幕的尺寸信息 1屏幕参数 2系统屏幕密度 3独立像素密度dp 4单位换算 二2D绘图基础 三Android XML 绘图 Bitmap Shape Layer Selector 四绘图技巧 Canvas 一.屏幕的尺寸信息 1屏幕参数 屏幕大小 指屏幕对角线的长度,通常使用"寸"来度量,例如4.7寸手机 5.5寸手机等. 分辨率 分辨率是指手机屏幕的像素点个数,例如720*1280是指屏幕分变率,指宽有720个像素点,高有1280个像素点. PPI 每英寸像素(Pixels Per

Android绘图机制与处理技巧(四)——Android图像处理之画笔特效处理

除了常用的画笔属性,比如普通的画笔(Paint),带边框.填充的style,颜色(Color),宽度(StrokeWidth),抗锯齿(ANTI_ALIAS_FLAG)等,Android还提供了各种各样专业的画笔工具,如记号笔.毛笔.蜡笔等,使用它们可以实现更加丰富的效果. PorterDuffXfermode 下图中列举了16种PorterDuffXfermode,有点像数学中集合的交集.并集这样的概念,它控制的是两个图像间的混合显示模式. PorterDuffXfermode设置的是两个图层

Android绘图机制与处理技巧(二)——Android图像处理之色彩特效处理

Android对于图片处理,最常使用到的数据结构是位图--Bitmap,它包含了一张图片所有的数据.整个图片都是由点阵和颜色值组成的,所谓点阵就是一个包含像素的矩阵,每一个元素对应着图片的一个像素.而颜色值--ARGB,分别对应透明图.红.绿.蓝这四个通道分量,它们共同决定了每个像素点显示的颜色. 色彩矩阵分析 在色彩处理中,通常使用以下三个角度来描述一个图像. 色调--物体传播的颜色 饱和度--颜色的纯度,从0(灰)到100%(饱和)来进行描述 亮度--颜色的相对明暗程度 而在Android中

Android 绘图之一:Canvas 及 Paint 简介

前言 除了使用已有的图片之外,Android应用常常需要在运行时根据场景动态生成2D图片,比如手机游戏,这就需要借助于Android2D绘图的支持.本篇博客主要讲解一下Android下使用Canvas进行绘图的相关操作.最后将以一个简单的Demo演示如何使用Canvas在ImageView上画图并保存. 画布Canvas 在Android下进行2D绘图需要Canvas类的支持,它位于"android.graphics.Canvas"包下,直译过来为画布的意思,用于完成在View上的绘图