Android绘图基础

Android绘图基础

了解前端的都知道H5里面有Canvas,Android里面也有Canvas,接下来我们会逐步使用Canvas来绘制一些基本图形,了解Canvas绘图机制。

获取Canvas对象

获取canvas对象有三种方式:

  1. 重写View的onDraw方法
  2. 自己创建Canvas对象,代码如下
    Bitmap b = Bitmap.createBitmap(100,100, Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
  3. 调用SurfaceHolder.lockCanvas(),返回一个Canvas对象

Canvas的常用方法

1)填充
drawARGB(int a, int r, int g, int b)
drawColor(int color)
drawRGB(int r, int g, int b)
drawColor(int color, PorterDuff.Mode mode)
2)几何图形
canvas.drawArc (扇形)
canvas.drawCircle(圆)
canvas.drawOval(椭圆)
canvas.drawLine(线)
canvas.drawPoint(点)
canvas.drawRect(矩形)
canvas.drawRoundRect(圆角矩形)
canvas.drawVertices(顶点)
cnavas.drawPath(路径)
3)图片
canvas.drawBitmap (位图)
canvas.drawPicture (图片)
4)文本
canvas.drawText

接下来我们对Canvas进行基本的应用,新建项目,新建MyView继承自View,重写onDraw方法获取Canvas对象,代码如下:

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by tuozhaobing on 16-4-6.
 * Add Some Description There
 */
public class MyView extends View {
    public MyView(Context context) {
        super(context);
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

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

Canvas作为画布,要画东西自然也要有画笔的出现,所以我们新建Paint对象,并对Paint对象进行基本的初始化,随后我们使MyView实现Runnable接口,通过一个线程控制绘制,观察Canvas绘制效果,完整的MyView代码如下:

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

/**
 * Created by tuozhaobing on 16-4-6.
 * Add Some Description There
 */
public class MyView extends View implements Runnable{
    private Paint mPaint;
    public MyView(Context context) {
        super(context);
        initPaint();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initPaint();
    }

    public void initPaint(){
        mPaint = new Paint();
        /*抗锯齿*/
        mPaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        /*设置画布颜色*/
        canvas.drawColor(Color.BLACK);
        /*设置裁剪区域*/
        canvas.clipRect(10, 10, 280, 260);
        /*保存*/
        canvas.save();
        /*旋转画布*/
        canvas.rotate(45.0f);
        /*设置画笔颜色*/
        mPaint.setColor(Color.GREEN);
        canvas.drawRect(new Rect(15, 15, 140, 70), mPaint);
        canvas.restore();
        mPaint.setColor(Color.RED);
        canvas.drawRect(new Rect(150,75,260,120),mPaint);
    }

    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()){
            try {
                Thread.sleep(100);
            }catch (InterruptedException e){
                Thread.currentThread().interrupt();
            }
            //在副线程刷新UI
            postInvalidate();
        }
    }
}

在MainActivity中如下使用:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyView myView = new MyView(this);
        setContentView(myView);
    }
}

运行效果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值