zoukankan      html  css  js  c++  java
  • Android学习绘制图形

    Android的绘图继承于View组件,重写onDraw(Canvas canvas) 方法时涉及一个绘图API: Canvas 代表了依附于指定View的画布,并且提供了很多绘制方法。

    Canvas提供的方法还涉及一个API: Paint ,Paint代表了Canvas上的画笔,主要用于设置绘制风格,画笔颜色,粗细,填充风格等。

    Path代表任意多条直线连接而成的任意图形,当Canvas根据Path绘制图形时,它可以绘制出任意形状的图形。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.LinearGradient;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.RectF;
    import android.graphics.Shader;
    import android.util.AttributeSet;
    import android.view.View;
     
    public class MyView extends View {
        public MyView(Context context, AttributeSet set) {
            super(context, set);
        }
     
        @Override
        // 重写该方法,进行绘图
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            // 把整张画布绘制成白色
            canvas.drawColor(Color.WHITE);
            Paint paint = new Paint();
            // 去锯齿
            paint.setAntiAlias(true);
            paint.setColor(Color.BLUE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(3);
            // 绘制圆形
            canvas.drawCircle(40, 40, 30, paint);
            // 绘制正方形
            canvas.drawRect(10, 80, 70, 140, paint);
            // 绘制矩形
            canvas.drawRect(10, 150, 70, 190, paint);
            RectF re1 = new RectF(10, 200, 70, 230);
            // 绘制圆角矩形
            canvas.drawRoundRect(re1, 15, 15, paint);
            RectF re11 = new RectF(10, 240, 70, 270);
            // 绘制椭圆
            canvas.drawOval(re11, paint);
            // 定义一个Path对象,封闭成一个三角形。
            Path path1 = new Path();
            path1.moveTo(10, 340);
            path1.lineTo(70, 340);
            path1.lineTo(40, 290);
            path1.close();
            // 根据Path进行绘制,绘制三角形
            canvas.drawPath(path1, paint);
            // 定义一个Path对象,封闭成一个五角形。
            Path path2 = new Path();
            path2.moveTo(26, 360);
            path2.lineTo(54, 360);
            path2.lineTo(70, 392);
            path2.lineTo(40, 420);
            path2.lineTo(10, 392);
            path2.close();
            // 根据Path进行绘制,绘制五角形
            canvas.drawPath(path2, paint);
            // ----------设置填充风格后绘制----------
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.RED);
            canvas.drawCircle(120, 40, 30, paint);
            // 绘制正方形
            canvas.drawRect(90, 80, 150, 140, paint);
            // 绘制矩形
            canvas.drawRect(90, 150, 150, 190, paint);
            RectF re2 = new RectF(90, 200, 150, 230);
            // 绘制圆角矩形
            canvas.drawRoundRect(re2, 15, 15, paint);
            RectF re21 = new RectF(90, 240, 150, 270);
            // 绘制椭圆
            canvas.drawOval(re21, paint);
            Path path3 = new Path();
            path3.moveTo(90, 340);
            path3.lineTo(150, 340);
            path3.lineTo(120, 290);
            path3.close();
            // 绘制三角形
            canvas.drawPath(path3, paint);
            Path path4 = new Path();
            path4.moveTo(106, 360);
            path4.lineTo(134, 360);
            path4.lineTo(150, 392);
            path4.lineTo(120, 420);
            path4.lineTo(90, 392);
            path4.close();
            // 绘制五角形
            canvas.drawPath(path4, paint);
            // ----------设置渐变器后绘制----------
            // 为Paint设置渐变器
            Shader mShader = new LinearGradient(0, 0, 40, 60, new int[] {
                    Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW }, null,
                    Shader.TileMode.REPEAT);
            paint.setShader(mShader);
            // 设置阴影
            paint.setShadowLayer(45, 10, 10, Color.GRAY);
            // 绘制圆形
            canvas.drawCircle(200, 40, 30, paint);
            // 绘制正方形
            canvas.drawRect(170, 80, 230, 140, paint);
            // 绘制矩形
            canvas.drawRect(170, 150, 230, 190, paint);
            RectF re3 = new RectF(170, 200, 230, 230);
            // 绘制圆角矩形
            canvas.drawRoundRect(re3, 15, 15, paint);
            RectF re31 = new RectF(170, 240, 230, 270);
            // 绘制椭圆
            canvas.drawOval(re31, paint);
            Path path5 = new Path();
            path5.moveTo(170, 340);
            path5.lineTo(230, 340);
            path5.lineTo(200, 290);
            path5.close();
            // 根据Path进行绘制,绘制三角形
            canvas.drawPath(path5, paint);
            Path path6 = new Path();
            path6.moveTo(186, 360);
            path6.lineTo(214, 360);
            path6.lineTo(230, 392);
            path6.lineTo(200, 420);
            path6.lineTo(170, 392);
            path6.close();
            // 根据Path进行绘制,绘制五角形
            canvas.drawPath(path6, paint);
            // ----------设置字符大小后绘制----------
            paint.setTextSize(24);
            paint.setShader(null);
            // 绘制7个字符串
            canvas.drawText(getResources().getString(R.string.circle), 240, 50,paint);
            canvas.drawText(getResources().getString(R.string.square), 240, 120,paint);
            canvas.drawText(getResources().getString(R.string.rect), 240, 175,paint);
            canvas.drawText(getResources().getString(R.string.round_rect), 230,220, paint);
            canvas.drawText(getResources().getString(R.string.oval), 240, 260,paint);
            canvas.drawText(getResources().getString(R.string.triangle), 240, 325,paint);
            canvas.drawText(getResources().getString(R.string.pentagon), 240, 390,paint);
        }
    }


  • 相关阅读:
    MIP技术进展月报第3期:MIP小姐姐听说,你想改改MIP官网?
    MIP技术进展月报第2期: 数据绑定,异步脚本加速
    WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享
    改造MIP获得搜索青睐,轻松完成SEO
    MIP 技术进展月报:储存功能全新上线,MIP-Cache域名升级,校验更严谨
    【转】W3C中国与百度联合组织移动网页加速技术研讨会
    百度将与W3C中国召开MIP技术研讨会
    【公告】MIP组件审核平台故障-影响说明
    【公告】关于8.8MIP组件审核平台故障的说明
    MIP 移动网页加速器视频教程全新发布
  • 原文地址:https://www.cnblogs.com/jackwuyongxing/p/3985891.html
Copyright © 2011-2022 走看看