前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >速读原著-Android应用开发入门教程(记录绘制的过程)

速读原著-Android应用开发入门教程(记录绘制的过程)

作者头像
cwl_java
发布2020-02-13 15:10:29
4120
发布2020-02-13 15:10:29
举报
文章被收录于专栏:cwl_Javacwl_Javacwl_Java

9.6 记录绘制的过程

在图形界面的绘制过程中,绘制是一个分阶段的复杂工作,如果可以将某一次绘制的过程纪录,就可以在其他的地方重现这个绘制。 参考示例程序:ApiDemo 的 Pictures(ApiDemo=>Graphics=>Pictures) 源代码:android/apis/graphics/ Pictures.java Pictures 程序的运行结果如图所示:

在这里插入图片描述
在这里插入图片描述

本例子的核心部分如下所示:

    private static class SampleView extends View {
        private Picture mPicture;
        private Drawable mDrawable;
        static void drawSomething(Canvas canvas) { // 绘制的过程
            Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
            p.setColor(0x88FF0000);
            canvas.drawCircle(50, 50, 40, p);
            p.setColor(Color.GREEN);
            p.setTextSize(30);
            canvas.drawText("Pictures", 60, 60, p);
        }
        public SampleView(Context context) {
            super(context);
            setFocusable(true);
            setFocusableInTouchMode(true);
            mPicture = new Picture();
            drawSomething(mPicture.beginRecording(200, 100)); // 开始记录绘制的过程
            mPicture.endRecording(); // 结束记录绘制的过程

            mDrawable = new PictureDrawable(mPicture); // 创建一个可绘制物
        }

        @Override protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);
            canvas.drawPicture(mPicture); // 绘制第 1 次
            canvas.drawPicture(mPicture, new RectF(0, 100, getWidth(), 200));
            // 绘制第 2 次
            mDrawable.setBounds(0, 200, getWidth(), 300);
            mDrawable.draw(canvas); // 绘制第 3 次

            ByteArrayOutputStream os = new ByteArrayOutputStream();
            mPicture.writeToStream(os);
            InputStream is = new ByteArrayInputStream(os.toByteArray());
            canvas.translate(0, 300);
            canvas.drawPicture(Picture.createFromStream(is)); // 绘制第 4 次
        }
    }

本例子进行的 4 次绘制情况为:先在一个 Picture 中进行绘制,第 1 次和第 2 次使用这个纪录的 Picture 进行绘制,第 3 次使用由 Picture 转换成的 PictureDrawable 进行绘制,第 4 次将 Picture 转成一个通用的流,然后在转回成 Picture 进行绘制。

Pictures 是一个可以记录绘制过程的类,通常情况下 Android 的绘制工作需要被绘制到画布(Cavans)上,但是能显示的画布只有一个。Pictures 的功能就在于可以让绘制的东西绘制到一个虚拟的画布上,这个虚拟的画布由 Pictures 的 beginRecording()函数返回,picture.draw(canvas)和 canvas.drawPicture()函数用于将一个记录好的绘制过程,重现到画布上。Pictures 绘制的内容也可以被记录到一个流当中,然后在重新构造一个 Pictures。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.6 记录绘制的过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档