免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1649 | 回复: 0
打印 上一主题 下一主题

Android canvas 绘图 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-17 09:40 |只看该作者 |倒序浏览
  1. package com.canvas;

  2. import android.content.Context;
  3. import android.graphics.Canvas;
  4. import android.graphics.Color;
  5. import android.graphics.LinearGradient;
  6. import android.graphics.Paint;
  7. import android.graphics.Path;
  8. import android.graphics.RectF;
  9. import android.graphics.Shader;
  10. import android.util.AttributeSet;
  11. import android.view.View;

  12. /**
  13. * .
  14. */
  15. public class MyView extends View {
  16.     public MyView(Context context,AttributeSet set) {
  17.         super(context,set);
  18.     }

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

  132.     }
  133. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP