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);    }}

运行效果如下:

更多相关文章

  1. 类和 Json对象
  2. Android(安卓)Service生命周期及用法!
  3. Android开发之文件下载
  4. Android中Market的Loading效果实现方法
  5. android上的http
  6. Android中Activity、Window、PhoneWindow和DecorView之间的关系
  7. Android防止内容溢出
  8. android:绘图
  9. Google Android操作系统内核编译图文教程

随机推荐

  1. android客户端向服务端传汉字乱码问题
  2. 【目录】每次吃一点Android
  3. android 之button 屏幕翻转
  4. Android(安卓)混淆代码有关问题总结
  5. android知识点
  6. Android(安卓)- Activity的四种启动模式
  7. Android系统驱动概述
  8. Android(安卓)Studio 清理缓存clean proj
  9. Android进程so注入Hook java方法
  10. Android(安卓)开发常用代码