Android中的画布绘制(一)

来源:互联网 发布:清除微信数据会怎么样 编辑:程序博客网 时间:2024/05/09 14:49

1、画图的要素

(1)画布-->canvas        尺寸--》width&height        布/纸 --》bitmap/view(2)画笔 --》Paint        颜色--》Color        宽度--》stoke width        样式--》flags(字体,填充方式,抗锯齿等等)(3)画的对象 --》line,shape,bitmap

2、创建一张画布

 /** * 定义canvas的尺寸,单位为像素 */private static final int WIDTH = 1000;private static final int HEIGHT = 1000;private Bitmap bitmap;private Canvas canvas;/** * canvas本身是不能保存绘制结果,需要一个保存绘制结果* 准备canvas,canvas的绘制结果输出到一个bitmap中*/private void prepareCanvas() {        bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888);        canvas = new Canvas(bitmap);}canvas.drawColor(Color.WHITE);imageView.setImageBitmap(bitmap);

2、画坐标系

    /**     * 坐标在画布上的缩进尺寸     */        private static final int PADDING = 100;        Paint paint = new Paint();        paint.setStrokeWidth(5); // 线条宽度        paint.setColor(Color.LTGRAY); // 设置颜色        int originX = PADDING;        int originY = HEIGHT - PADDING;        // 先画横坐标        canvas.drawLine(originX, originY, WIDTH - PADDING, originY, paint);        // 再画纵坐标        canvas.drawLine(originX, originY, originX, PADDING, paint);

3、画文字

        Paint paint = new Paint();        // 设置标题        paint.setColor(Color.BLACK);        paint.setTextSize(50);        paint.setTypeface(Typeface.MONOSPACE);//设置字体        paint.setTextAlign(Paint.Align.CENTER);//设置字体对齐方式        String title = "柱状图示例";        canvas.drawText(title, WIDTH / 2, 70, paint);        // 给标题加一条下划线        paint.setColor(0xFFFF4081);        // paint提供了计算文本宽的方法        float width = paint.measureText(title);        paint.setStrokeWidth(6);        float startX = (WIDTH - width) / 2;        float startY = 70 + 15;        canvas.drawLine(startX, startY, startX + width, startY, paint);        // 纵坐标值,每隔 100 标注一个        paint.setTextSize(40);        paint.setColor(Color.LTGRAY);        paint.setTextAlign(Paint.Align.RIGHT);        for (int i = 0; i < 9; ++i) {            float x = PADDING - 20;            float y = HEIGHT - (i + 1) * 100;            canvas.drawText(String.valueOf(i), x, y, paint);        }

4、画柱状体

        Paint paint = new Paint();        paint.setColor(0xFF009688);        float left = -15;        float top = (int) (HEIGHT - PADDING - value * 100);        float right = 15;        float bottom = HEIGHT - PADDING;        canvas.drawRect(left, top, right, bottom, paint);        // 顶上标注数值        paint.setTextSize(30);        paint.setTextAlign(Paint.Align.CENTER);        paint.setColor(0xFFFDD835);        String text = String.valueOf(value);        canvas.drawText(text, 0, top - 10, paint);        // 下面标注季度        canvas.save();//保存之前canvas状态        canvas.rotate(-30, 30, bottom + 30);        paint.setColor(0xFF546E7A);        canvas.drawText(item, 0, bottom + 30, paint);        canvas.restore();//恢复之前保存的canvas状态    /**     * 平移     */    private void translate() {        for (int index = 0; index < 4; index++) {            canvas.save();            canvas.translate(PADDING + (index + 1) * 150, 0);            drawRect(values[index], items[index]);            canvas.restore();        }    }

(1)save&restore

    可保存对canvas设置的各种属性,例如rotate,scale,translate,skew,clip    两者配对使用,用于保存和恢复现场    save有计数,可通过restoreToCount指定恢复到哪一级
0 0
原创粉丝点击