Android绘制进阶之一:图形的绘制
3334 点击·0 回帖
![]() | ![]() | |
![]() | 开始学习绘制,首先联系图像的基本元素的绘制,包括点线面及路径的绘制,没有难度,代码示例如下: 1. package com.mike.activity; 2. 3. import Android.R; 4. import Android.app.Activity; 5. import Android.graphics.Bitmap; 6. import Android.graphics.Canvas; 7. import Android.graphics.Color; 8. import Android.graphics.Paint; 9. import Android.graphics.Paint.Style; 10. import Android.graphics.Path; 11. import Android.graphics.RectF; 12. import Android.graphics.drawable.BitmapDrawable; 13. import Android.os.Bundle; 14. import Android.view.ViewGroup.LayoutParams; 15. import Android.widget.ImageView; 16. import Android.widget.LinearLayout; 17. 18. public class DrawDemoActivity extends Activity { 19. /** Called when the activity is first created. */ 20. @Override 21. public void onCreate(Bundle savedInstanceState) { 22. super.onCreate(savedInstanceState); 23. 24. /* 25. * 配置類型:1,ALPHA_8: 用于Alpha蒙版的位图,只为alpha通道分配8位,没有其他颜色 26. * 2,ARGB_4444, 27. * 3,ARGB_8888, 28. * 4,RGB565(与ARGB_8888具有相同的高质量,但占用更少的内存) 29. * 30. * ARGB_8888 :每个颜色占8位,创建位图 31. * param : A:alpha通道:灰度通道,用来表明透明度信息,共256级 32. * R:red 33. * G:green 34. * B:blue 35. * 36. * 37. * Note: 蒙板:蒙板要结合图层来使用。蒙板的用处很多,可以用来扣图、创建选区等等, 38. * 由于我好久不用PS了,所以蒙板的好多功能在这里不能一下子讲完。 39. 举个通俗的例子:蒙板就是一块布,在某一图层上添加蒙板后就是在那个图层上盖了一块布, 40. 利用那块布可以实现多种效果,用黑色在蒙板上填充就看不见蒙板所在图层下面的东西, 41. 用白色填充就看见蒙板所在图层下面的东西,还可以利用蒙板制作渐变。 42. 总之蒙板这个功能说复杂它就复杂,说它简单它就简单,这个家伙功能不小。 43. * 44. */ 45. Bitmap bitmap = Bitmap.createBitmap(getWindowManager().getDefaultDisplay().getWidth(), 46. getWindowManager().getDefaultDisplay().getHeight(), 47. Bitmap.Config.ARGB_8888);//配置 48. 49. 50. 51. Canvas canvas = new Canvas(bitmap); //画布 52. 53. Paint paint = new Paint(); 54. paint.setColor(Color.WHITE);//可以直接设置颜色,也可通过Argb方法,,设置精确颜色 55. // int myColor = Color.argb(alpha, red, green, blue); 56. 57. 58. /* 59. * 风格: 60. * STROKE 仅绘形状的轮廓 61. * FILL 仅填充形状 www.atcpu.com 62. * FILL_AND_STROKE 填充并绘制形状的轮廓 63. */ 64. 65. //1:画一个点 66. // paint.setStyle(Style.STROKE);不涉及封闭图形,不写此属性ok~ 67. // paint.setStrokeWidth(100); 68. // canvas.drawPoint(199, 201, paint); 69. 70. 71. //2,画一条线 72. // paint.setStyle(Style.STROKE);不涉及封闭图形,不写此属性ok~ 73. // paint.setStrokeWidth(10); 74. // canvas.drawLine(50, 50, 100, 100, paint); 75. 76. //3,画一个矩形 77. // paint.setStyle(Style.FILL_AND_STROKE); 78. // paint.setStrokeWidth(10); 79. // canvas.drawRect(50, 50, 100, 100, paint);//另外一种绘制矩形的方法是:传递一个RectF对象 80. 81. //4,画一个椭圆 82. // paint.setStyle(Style.STROKE); 83. // paint.setStrokeWidth(10); 84. // RectF oval = new RectF(10, 10, 400, 200) ;//即矩形的内接圆 85. // canvas.drawOval(oval , paint); 86. 87. //5,画一个圆 88. // paint.setStyle(Style.STROKE); 89. // paint.setStrokeWidth(10); 90. // canvas.drawCircle(100, 100, 50, paint); 91. 92. //6,路径:通过路径Path对象 93. // paint.setStyle(Style.STROKE); 94. // paint.setStrokeWidth(10); 95. // Path path = new Path(); 96. // path.moveTo(20, 20);//起始点 97. // path.lineTo(30, 30); 98. // path.lineTo(40, 60); 99. // path.lineTo(70, 100); 100. // canvas.drawPath(path, paint); 101. 102. ImageView imageView = new ImageView(this); 103. 104. LayoutParams p = new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,LinearLayout.LayoutParams.FILL_PARENT); 105. imageView.setLayoutParams(p); 106. imageView.setBackgroundDrawable(new BitmapDrawable(bitmap)); 107. 108. 109. setContentView(imageView); 110. 111. 112. } 113. } | |
![]() | ![]() |