Android Canvas绘图详解(图文)

转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html

Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0。今天我们主要要了解的是2D相关的,如果你想看3D的话那么可以跳过这篇文章。

大部分2D使用的api都在android.graphics和android.graphics.drawable包中。他们提供了图形处理相关的: Canvas、ColorFilter、Point(点)和RetcF(矩形)等,还有一些动画相关的:AnimationDrawable、 BitmapDrawable和TransitionDrawable等。以图形处理来说,我们最常用到的就是在一个View上画一些图片、形状或者自定义的文本内容,这里我们都是使用Canvas来实现的。你可以获取View中的Canvas对象,绘制一些自定义形状,然后调用View. invalidate方法让View重新刷新,然后绘制一个新的形状,这样达到2D动画效果。下面我们就主要来了解下Canvas的使用方法。

Canvas对象的获取方式有两种:一种我们通过重写View.onDraw方法,View中的Canvas对象会被当做参数传递过来,我们操作这个Canvas,效果会直接反应在View中。另一种就是当你想创建一个Canvas对象时使用的方法:

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);    
Canvas c = newCanvas(b);

上面代码创建了一个尺寸是100*100的Bitmap,使用它作为Canvas操作的对象,这时候的Canvas就是使用创建的方式。当你使用创建的Canvas在bitmap上执行绘制方法后,你还可以将绘制的结果提交给另外一个Canvas,这样就可以达到两个Canvas协作完成的效果,简化逻辑。但是android SDK建议使用View.onDraw参数里提供的Canvas就好,没必要自己创建一个新的Canvas对象。接下来我们看看Canvas提供我们哪些绘制图形的方法。我们创建一个自定义View对象,使用onDraw方法提供的Canvas进行绘制图形。

CanvasDemoActivity.java:


import android.app.Activity;     
import android.content.Context;     
import android.graphics.Canvas;     
import android.graphics.Color;     
import android.graphics.Paint;     
import android.os.Bundle;     
import android.view.View;     
           
public class CanvasDemoActivity extends Activity {     
           
    @Override     
    protected void onCreate(Bundle savedInstanceState) {     
        super.onCreate(savedInstanceState);     
           
        setContentView(new CustomView1(this));     
           
    }     
           
    /**     
     * 使用内部类 自定义一个简单的View     
     * @author Administrator     
     *     
     */
    class CustomView1 extends View{     
           
        Paint paint;     
           
        public CustomView1(Context context) {     
            super(context);     
            paint = new Paint(); //设置一个笔刷大小是3的黄色的画笔     
            paint.setColor(Color.YELLOW);     
            paint.setStrokeJoin(Paint.Join.ROUND);     
            paint.setStrokeCap(Paint.Cap.ROUND);     
            paint.setStrokeWidth(3);     
        }     
           
        //在这里我们将测试canvas提供的绘制图形方法     
        @Override     
        protected void onDraw(Canvas canvas) {     
           
        }     
           
    }     
           
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值