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. 3.6.3新版本AndroidStudio报Could not resolve all artifacts fo
  2. Android中Market的Loading效果实现方法
  3. android:TabHost使用方法
  4. Android内核开发:理解和掌握repo工具(含被墙后的下载方法)
  5. webapp打包为Android的apk包的一种方法
  6. Android智能指针使用方法介绍
  7. [Android] ListView (普通列表控件) 的基本使用方法

随机推荐

  1. 你知道什么是漂亮排序法吗?哦,知道,不就是臭
  2. Hard 级别难度?桶排序几行代码搞定!
  3. 面试官,你再问我滑动窗口问题试试?我有解题
  4. 扫雷与算法:如何随机化的布雷(一)
  5. 趣味算法图解,高清无码图免费下载
  6. 从简单二叉树问题重新来看深度优先搜索
  7. 五分钟了解一下什么是「贪心算法 」
  8. 大家好,我是练习时长两年半的LeetCode爱好
  9. 数据结构与算法——单链表
  10. 慢速排序算法到底有多慢