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

速读原著-Android应用开发入门教程(图像、图形、文本的基本绘制)

作者头像
cwl_java
发布2020-02-13 15:12:31
4110
发布2020-02-13 15:12:31
举报
文章被收录于专栏:cwl_Java

9.2 图像、图形、文本的基本绘制

Android 中基本的绘制包括了图像、图形和文本的绘制。

参考示例程序:ApiDemo 的AlphaBitmap(ApiDemo=>Graphics=>AlphaBitmap) 源代码:android/apis/graphics/AlphaBitmap.java AlphaBitmap 程序的运行结果如图所示:

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

本程序在界面上自上而下一共绘制了 3 个内容,第一个是一个原始位图,第二个是经过变化的位图,第三个是几何图形。

在这个示例程序中,主要通过将一个自定义的 SampleView 设置成活动的 View 作为其中的 ContentView。onCreate()函数如下所示:

代码语言:javascript
复制
public class AlphaBitmap extends GraphicsActivity { // GraphicsActivity 相当于 Activity 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this)); // 设置实现中的 SampleView 
    }
}

SampleView 是其中扩展了 View 的实现,主要的内容在类的构造函数和 OnDraw()函数中,内容如下所示:

代码语言:javascript
复制
    private static class SampleView extends View {
        private Bitmap mBitmap;
        private Bitmap mBitmap2;
        private Bitmap mBitmap3;
        private Shader mShader;
        public SampleView(Context context) {
            super(context);
            setFocusable(true);
            InputStream is = context.getResources().
                    openRawResource(R.drawable.app_sample_code);
            mBitmap = BitmapFactory.decodeStream(is); // 解码位图文件到 Bitmap
            mBitmap2 = mBitmap.extractAlpha(); // 提取位图的透明通道
            // 创建一个位图
            mBitmap3 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);
            drawIntoBitmap(mBitmap3); // 调用自己实现的 drawIntoBitmap()
            mShader = new LinearGradient(0, 0, 100, 70, new int[] {
                    Color.RED, Color.GREEN, Color.BLUE },
                    null, Shader.TileMode.MIRROR);
        }
        private static void drawIntoBitmap(Bitmap bm) {
            float x = bm.getWidth();
            float y = bm.getHeight();
            Canvas c = new Canvas(bm);
            Paint p = new Paint();
            p.setAntiAlias(true);

            p.setAlpha(0x80);
            c.drawCircle(x/2, y/2, x/2, p);

            p.setAlpha(0x30);
            p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
            p.setTextSize(60);
            p.setTextAlign(Paint.Align.CENTER);
            Paint.FontMetrics fm = p.getFontMetrics();
            c.drawText("Alpha", x/2, (y-fm.ascent)/2, p);
        }
        @Override 
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);
            Paint p = new Paint();
            float y = 10; // 设置纵坐标
            p.setColor(Color.RED); // 设置画笔为红色
            canvas.drawBitmap(mBitmap, 10, y, p); // 绘制第 1 个位图(原始图像)
            y += mBitmap.getHeight() + 10; // 纵坐标增加
            canvas.drawBitmap(mBitmap2, 10, y, p); // 绘制第 2 个位图(根据红色的画笔)
            y += mBitmap2.getHeight() + 10; // 纵坐标增加
            p.setShader(mShader); // 设置阴影
            canvas.drawBitmap(mBitmap3, 10, y, p); // 绘制第 3 个位图
        }
    }

第 1 个图是直接对原始的图像进行了绘制;第 2 个图是在原始图像的基础上抽取了透明通道,所以绘制时画笔(Paint)的颜色起到了作用;第 3 个图是调用 drawIntoBitmap()绘制了一个具有渐变颜色的圆,并附加了文字。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 9.2 图像、图形、文本的基本绘制
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档