第9章 2D图像的使用

第9章 2D图像的使用
    Android 系统的图形 API包括:(是比较底层的接口)
        1 2D部分使用 android.graphics类,也作为上层控件的构建基础;
        2 3D部分使用OpenGL作为标准接口。
    9.1 使用 2D图形接口的程序结构。
        关系:
            UserApplication -> Android.Widget.xxx -> Android.view.View
                                                  /
             MYview  ----------------------------/-> android.graphics(Graphics/Text/Bitamp)
        说明:
            android.graphics 包含如下内容:
                1 Point、Rect、Color 等:一些基础类,点、矩阵、颜色的基础信息元素;
                2 Bitmap:表示内存中的位图。
                3 Paint: 画笔,用于控制绘制的样式(style)和颜色(color)等信息;
                4 Canvas:画布。
                    处理onDraw()主要的操作是Paint(画笔)和Canvas(画布),他们可以完成所有的绘制。
                    Canvas 类包含了3类方法:
                    1  几何图形
                    2  文本
                    3  位图
        API
            Canvas的几何图形API
                void drawARGB(int a, int r, int g, int b)       // 将整体填充为某颜色
                void drawPoints(float[] pts, Paint paint)       // 绘制一个点
                void drawLines(float[] pts, Paint paint)        // 绘制一条线
                void drawRect(RectF rect, Paint paint)          // 绘制矩形
                void drawCircle(float cx, float cy, float radius, Paint paint)  // 绘制形
                void drawArc(RectF oval, float startAngle, float sweepAngle,
                            boolean useCenter, Paint paint)     // 绘制弧
            Canvas的文本(Text)方面
                void drawText(String text, int start, int end, float x, float y, Paint paint)
                void drawText(char[] text, int index, int count, float x, float y, Paint paint)
                void drawText(String text, float x, float y, Paint paint)
                void drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
            Canvas类的位图(Bitmap)
                void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)      // 指定 Matrix 绘制位图
                void drawBitmap(int[] colors, int offset, int stride,           // 指定数组作为 Bitmap绘制
                            float x, float y, int width, int height,
                            boolean hasAlpha, Paint paint)
                void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)//自动缩放到目标矩形的绘制

    9.2 图像、图形、文本的基本绘制
        示例:
        Java
        public class AlphaBitmap extends GraphicsActivity       // GraphicsActivity 相当于 Activity
        {   @Override
            protected void onCreate(Bundle savedInstanceState)
            {   super.onCreate(savedInstanceState);
                setContentView(new SampleView(this));           //设置实现中的 SampleView
            }
        }
        //从
        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个位图
                }
            }
    9.3 文本的对齐方式
        对齐操作不仅有水平和竖直上的对齐问题,甚至可以让文本在曲线的路径上实现对齐。
        示例:(略)
    9.4 使用路径效果(PathEffect)
        路径表示一条曲线,在 Android 中通过路径可以更灵活地实现一些效果。
        示例:(略)
    9.5 剪裁效果
        当几个绘制的内容重叠的时候,可以使用剪裁效果进行控制在重叠的情况下,显示哪个部分的内容。
        示例:(略)
    9.6 记录绘制的过程
        如果可以将某一次绘制的过程纪录,就可以在其他的地方重现这个绘制。
        示例:(略)
    9.7 动画效果
        示例:(略)
第10章 OpenGL 3D 图形的使用
    (略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值