MyView.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package com.xunao.effectdemo.view;
  2. /**
  3. * author : 程中强
  4. * e-mail : 740479946@qq.com
  5. * date : 2022/8/911:43
  6. * desc :
  7. * version: 1.0
  8. */
  9. import android.content.Context;
  10. import android.graphics.Canvas;
  11. import android.graphics.Color;
  12. import android.graphics.LinearGradient;
  13. import android.graphics.Paint;
  14. import android.graphics.Path;
  15. import android.graphics.RectF;
  16. import android.graphics.Shader;
  17. import android.util.AttributeSet;
  18. import android.view.View;
  19. public class MyView extends View {
  20. public MyView(Context context, AttributeSet attrs) {
  21. super(context, attrs);
  22. }
  23. @Override
  24. protected void onDraw(Canvas canvas) {
  25. // TODO Auto-generated method stub
  26. super.onDraw(canvas);
  27. //把整张画布绘制成白色
  28. canvas.drawColor(Color.WHITE);
  29. Paint paint = new Paint();
  30. //去锯齿
  31. paint.setAntiAlias(true);
  32. paint.setColor(Color.BLUE);
  33. paint.setStyle(Paint.Style.STROKE);
  34. paint.setStrokeWidth(3);
  35. //绘制圆形
  36. canvas.drawCircle(40, 40, 30, paint);
  37. //绘制正方形
  38. canvas.drawRect(10, 80, 70, 140, paint);
  39. //绘制矩形
  40. canvas.drawRect(10, 150, 70, 190, paint);
  41. RectF rel = new RectF(10, 240, 70, 270);
  42. //绘制椭圆
  43. canvas.drawOval(rel, 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(27, 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. //绘制圆角矩形
  71. RectF re2 = new RectF(90, 200, 150, 230);
  72. canvas.drawRoundRect(re2, 15, 15, paint);
  73. //绘制椭圆
  74. RectF re21 = new RectF(90, 240, 150, 270);
  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. //绘制五角形
  84. Path path4 = new Path();
  85. path4.moveTo(106, 360);
  86. path4.lineTo(134, 360);
  87. path4.lineTo(150, 392);
  88. path4.lineTo(120, 420);
  89. path4.lineTo(90, 392);
  90. path4.close();
  91. canvas.drawPath(path4, paint);
  92. //设置渐变器后绘制
  93. //为Paint设置渐变器
  94. Shader mShasder = new LinearGradient(0, 0, 40, 60, new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW}, null, Shader.TileMode.REPEAT);
  95. paint.setShader(mShasder);
  96. //设置阴影
  97. paint.setShadowLayer(45, 10, 10, Color.GRAY);
  98. //绘制圆形
  99. canvas.drawCircle(200, 40, 30, paint);
  100. //绘制正方形
  101. canvas.drawRect(170, 80, 230, 140, paint);
  102. //绘制矩形
  103. canvas.drawRect(170, 150, 230, 190, paint);
  104. //绘制圆角的矩形
  105. RectF re31 = new RectF();
  106. canvas.drawRoundRect(re31, 15, 15, paint);
  107. //绘制椭圆
  108. RectF re32 = new RectF();
  109. canvas.drawOval(re32, paint);
  110. //根据Path,绘制三角形
  111. Path path5 = new Path();
  112. path5.moveTo(170, 340);
  113. path5.lineTo(230, 340);
  114. path5.lineTo(200, 290);
  115. path5.close();
  116. canvas.drawPath(path5, paint);
  117. //根据PAth,进行绘制五角形
  118. Path path6 = new Path();
  119. path6.moveTo(186, 360);
  120. path6.lineTo(214, 360);
  121. path6.lineTo(230, 392);
  122. path6.lineTo(200, 420);
  123. path6.lineTo(170, 392);
  124. path6.close();
  125. canvas.drawPath(path6, paint);
  126. }
  127. }