`
byebyegov5qq
  • 浏览: 1212962 次
文章分类
社区版块
存档分类
最新评论

Android 中如何自己通过代码绘图

 
阅读更多

下文来自:

http://emmet1988.iteye.com/blog/1058517


----------------------------------

BasicViewDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importcom.test.R;
  3. importandroid.view.View;
  4. importandroid.content.Context;
  5. importandroid.graphics.Canvas;
  6. importandroid.graphics.Color;
  7. importandroid.graphics.Paint;
  8. importandroid.graphics.RectF;
  9. importandroid.graphics.Path;
  10. importandroid.graphics.Shader;
  11. importandroid.graphics.LinearGradient;
  12. /*自定义继承View的MyView*/
  13. publicclassBasicViewDrawextendsView{
  14. publicBasicViewDraw(Contextcontext){
  15. super(context);
  16. }
  17. /*重写onDraw()*/
  18. @Override
  19. protectedvoidonDraw(Canvascanvas){
  20. super.onDraw(canvas);
  21. /*设置背景为白色*/
  22. canvas.drawColor(Color.WHITE);
  23. Paintpaint=newPaint();
  24. /*去锯齿*/
  25. paint.setAntiAlias(true);
  26. /*设置paint的颜色*/
  27. paint.setColor(Color.RED);
  28. /*设置paint的style为STROKE:空心*/
  29. paint.setStyle(Paint.Style.STROKE);
  30. /*设置paint的外框宽度*/
  31. paint.setStrokeWidth(3);
  32. /*画一个空心圆形*/
  33. canvas.drawCircle(40,40,30,paint);
  34. /*画一个空心正方形*/
  35. canvas.drawRect(10,90,70,150,paint);
  36. /*画一个空心长方形*/
  37. canvas.drawRect(10,170,70,200,paint);
  38. /*画一个空心椭圆形*/
  39. RectFre=newRectF(10,220,70,250);
  40. canvas.drawOval(re,paint);
  41. /*画一个空心三角形*/
  42. Pathpath=newPath();
  43. path.moveTo(10,330);
  44. path.lineTo(70,330);
  45. path.lineTo(40,270);
  46. path.close();//记得要close
  47. canvas.drawPath(path,paint);
  48. /*画一个空心梯形*/
  49. Pathpath1=newPath();
  50. path1.moveTo(10,410);
  51. path1.lineTo(70,410);
  52. path1.lineTo(55,350);
  53. path1.lineTo(25,350);
  54. path1.close();
  55. canvas.drawPath(path1,paint);
  56. /*设置paint的style为FILL:实心*/
  57. paint.setStyle(Paint.Style.FILL);
  58. /*设置paint的颜色*/
  59. paint.setColor(Color.BLUE);
  60. /*画一个实心圆*/
  61. canvas.drawCircle(120,40,30,paint);
  62. /*画一个实心正方形*/
  63. canvas.drawRect(90,90,150,150,paint);
  64. /*画一个实心长方形*/
  65. canvas.drawRect(90,170,150,200,paint);
  66. /*画一个实心椭圆*/
  67. RectFre2=newRectF(90,220,150,250);
  68. canvas.drawOval(re2,paint);
  69. /*画一个实心三角形*/
  70. Pathpath2=newPath();
  71. path2.moveTo(90,330);
  72. path2.lineTo(150,330);
  73. path2.lineTo(120,270);
  74. path2.close();
  75. canvas.drawPath(path2,paint);
  76. /*画一个实心梯形*/
  77. Pathpath3=newPath();
  78. path3.moveTo(90,410);
  79. path3.lineTo(150,410);
  80. path3.lineTo(135,350);
  81. path3.lineTo(105,350);
  82. path3.close();
  83. canvas.drawPath(path3,paint);
  84. /*设置渐变色*/
  85. ShadermShader=newLinearGradient(0,0,100,100,newint[]{
  86. Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},null,
  87. Shader.TileMode.REPEAT);
  88. paint.setShader(mShader);
  89. /*画一个渐变色圆*/
  90. canvas.drawCircle(200,40,30,paint);
  91. /*画一个渐变色正方形*/
  92. canvas.drawRect(170,90,230,150,paint);
  93. /*画一个渐变色长方形*/
  94. canvas.drawRect(170,170,230,200,paint);
  95. /*画一个渐变色椭圆*/
  96. RectFre3=newRectF(170,220,230,250);
  97. canvas.drawOval(re3,paint);
  98. /*画一个渐变色三角形*/
  99. Pathpath4=newPath();
  100. path4.moveTo(170,330);
  101. path4.lineTo(230,330);
  102. path4.lineTo(200,270);
  103. path4.close();
  104. canvas.drawPath(path4,paint);
  105. /*画一个渐变色梯形*/
  106. Pathpath5=newPath();
  107. path5.moveTo(170,410);
  108. path5.lineTo(230,410);
  109. path5.lineTo(215,350);
  110. path5.lineTo(185,350);
  111. path5.close();
  112. canvas.drawPath(path5,paint);
  113. /*写字*/
  114. paint.setTextSize(24);
  115. canvas.drawText(getResources().getString(R.string.str_text1),240,50,paint);
  116. canvas.drawText(getResources().getString(R.string.str_text2),240,120,paint);
  117. canvas.drawText(getResources().getString(R.string.str_text3),240,190,paint);
  118. canvas.drawText(getResources().getString(R.string.str_text4),240,250,paint);
  119. canvas.drawText(getResources().getString(R.string.str_text5),240,320,paint);
  120. canvas.drawText(getResources().getString(R.string.str_text6),240,390,paint);
  121. }
  122. }

BasicView2Draw.java

Java代码 收藏代码
  1. classBasicView2DrawextendsView{
  2. Paintpaint;
  3. Bitmapbitmap;
  4. publicBasicView2Draw(Contextcontext){
  5. super(context);
  6. paint=newPaint(Paint.ANTI_ALIAS_FLAG);
  7. bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.icon);
  8. }
  9. privateBitmapcreateBitmap1(){
  10. Bitmapbitmap1=Bitmap.createBitmap(100,100,Config.ARGB_8888);
  11. Canvascanvas=newCanvas(bitmap1);
  12. canvas.drawColor(Color.BLUE);
  13. //canvas.drawARGB(0,0,0,0);//透明色
  14. canvas.drawBitmap(bitmap,0,0,paint);
  15. canvas.drawText("HelloAndroid",25,55,paint);
  16. returnbitmap1;
  17. }
  18. @Override
  19. protectedvoidonDraw(Canvascanvas){
  20. super.onDraw(canvas);
  21. //绘制位图
  22. //1.绘制位图在(10,10)位置上
  23. canvas.drawBitmap(createBitmap1(),10,10,paint);
  24. //2.canvas.drawBitmap(Bitmapbitmap,Rectsrc,Rectdest,Paintpaint);
  25. //canvas.drawBitmap(Bitmapbitmap,Rectsrc,RectFdest,Paintpaint);
  26. //绘制位图到一个指定的矩形dest中,位图会自动进行平移和缩放等操作,如果src的参数不为null
  27. //则会裁剪位图的部分区域来进行绘制
  28. Rectrect=newRect(10,10,50,60);
  29. RectFrectF1=newRectF(180.0f,20.0f,240.0f,80.0f);
  30. RectFrectF2=newRectF(180.0f,100.0f,240.0f,160.0f);
  31. canvas.drawBitmap(createBitmap1(),null,rectF1,paint);
  32. canvas.drawBitmap(createBitmap1(),rect,rectF2,paint);
  33. //点
  34. paint.setStyle(Paint.Style.FILL_AND_STROKE);
  35. paint.setStrokeWidth(5.0f);
  36. paint.setColor(Color.YELLOW);
  37. canvas.drawPoints(newfloat[]{120,120,140,140,160,160,180,180},paint);
  38. //线
  39. paint.reset();//重置画笔
  40. paint.setColor(Color.GREEN);
  41. paint.setAntiAlias(true);
  42. canvas.drawLine(30,30,130,40,paint);
  43. paint.setColor(Color.RED);
  44. canvas.drawLines(newfloat[]{40,40,140,40,50,50,90,90},paint);
  45. //矩形
  46. paint.setColor(Color.CYAN);
  47. canvas.drawRect(10,150,150,250,paint);
  48. paint.setColor(Color.GRAY);
  49. canvas.drawRect(newRect(10,260,150,280),paint);
  50. paint.setColor(Color.DKGRAY);
  51. canvas.drawRect(newRectF(20.2f,290.9f,120.2f,300.3f),paint);
  52. //绘制文本
  53. //paint.setTextSize(20);
  54. //paint.setColor(0x40ffffff);//半透明白色
  55. //paint.setTextAlign(Paint.Align.RIGHT);//对齐方向
  56. //canvas.drawText("CoolAndroid",250,180,paint);//这里注意,坐标(180,180)是文本的左下点坐标
  57. //画布平移:
  58. //平移的单位是像素,分别是在x,y轴上平移的像素点
  59. //正数代表的正方向,x轴为平面的右侧,y轴为平面的下方,相应的,负数则向反方向平移
  60. //canvas.translate(30.0f,30.0f);
  61. //画布缩放:
  62. //参数分别是在想x,y轴上放大或缩小的倍数,大雨1为放大,小于1为缩小,
  63. //缩放的原点默认为画布的原点(0,0),也可以指定缩放的原点
  64. //canvas.scale(2.0f,1.5f);
  65. //canvas.scale(0.5f,0.5f,100.0f,100.0f);//指定坐标(100.0f,100.0f)为缩放原点
  66. //这里剖析一下第二个缩放方法,其实系统为我们做的事情是这样的
  67. /*
  68. scale(floatsx,floatsy,floatpx,floatpy){
  69. translate(px,py);
  70. scale(sx,sy);
  71. translate(-px,-py);
  72. }
  73. */
  74. //画布旋转
  75. //1.以画布为原点,顺时针旋转40.0f度
  76. //canvas.rotate(40.0f);
  77. //2.以(100.11f,100.22f)为原点,顺时针旋转50.0f度
  78. //canvas.rotate(50.0f,100.11f,100.22f);
  79. //相应的,为了加深理解,我们再剖析一下第二个旋转方法
  80. //,其实系统为我们做的事情是这样的
  81. /*
  82. rotate(floatdegrees,floatpx,floatpy){
  83. translate(px,py);
  84. rotate(degrees);
  85. translate(-px,-py);
  86. }
  87. */
  88. //画布倾斜
  89. //skew(floatsx,floatxy);将画布在x及y轴方向上倾斜相应的角度,sx或sy为倾斜角度的tan值,
  90. //如canvas.skew(1,0);为在x方向上倾斜45度>>tan(45)=1
  91. //canvas.skew(1,0);
  92. }
  93. }

ClipRectDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Color;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.Path;
  7. importandroid.graphics.Region;
  8. importandroid.util.AttributeSet;
  9. importandroid.view.View;
  10. /**
  11. *---------------------------------------------------矩形区域-------------------------------------------------
  12. *canvas.clipRect(左上角x轴坐标,左上角y轴坐标,右下角x轴坐标,右下角y轴坐标,Region.Op.XOR);
  13. *最后一个参数有多个选择分别是:
  14. *//DIFFERENCE是第一次不同于第二次的部分显示出来
  15. //REPLACE是显示第二次的
  16. //REVERSE_DIFFERENCE是第二次不同于第一次的部分显示
  17. //INTERSECT:交集显示
  18. //UNION:全部显示
  19. //XOR补集,就是全集的减去交集剩余部分显示
  20. *@authoremmet1988.iteye.com
  21. *
  22. */
  23. publicclassClipRectDrawextendsView{
  24. Contextcontext;
  25. Paintpaint;
  26. Pathpath;
  27. publicClipRectDraw(Contextcontext){
  28. super(context);
  29. init();
  30. }
  31. publicClipRectDraw(Contextcontext,AttributeSetattrs){
  32. super(context,attrs);
  33. init();
  34. }
  35. publicClipRectDraw(Contextcontext,AttributeSetattrs,intdefStyle){
  36. super(context,attrs,defStyle);
  37. init();
  38. }
  39. privatevoidinit(){
  40. paint=newPaint();
  41. paint.setAntiAlias(true);
  42. paint.setStrokeWidth(5);
  43. paint.setTextSize(15);
  44. paint.setTextAlign(Paint.Align.RIGHT);
  45. path=newPath();
  46. }
  47. @Override
  48. protectedvoidonDraw(Canvascanvas){
  49. super.onDraw(canvas);
  50. canvas.drawColor(Color.GRAY);
  51. //左上图
  52. canvas.save();
  53. canvas.translate(10,10);
  54. drawScene(canvas);
  55. canvas.restore();
  56. //右上图
  57. canvas.save();
  58. canvas.translate(160,10);
  59. canvas.clipRect(10,10,90,90);
  60. canvas.clipRect(30,30,70,70,Region.Op.XOR);
  61. drawScene(canvas);
  62. canvas.restore();
  63. //左中图
  64. canvas.save();
  65. canvas.translate(10,130);
  66. path.reset();
  67. /*抛物曲线*/
  68. path.cubicTo(0,0,100,0,100,100);
  69. path.cubicTo(100,100,0,100,0,0);
  70. canvas.clipPath(path,Region.Op.REPLACE);
  71. drawScene(canvas);
  72. canvas.restore();
  73. //右中图
  74. canvas.save();
  75. canvas.translate(160,130);
  76. canvas.clipRect(0,0,60,60);
  77. canvas.clipRect(40,40,100,100,Region.Op.UNION);
  78. drawScene(canvas);
  79. canvas.restore();
  80. //左下图
  81. canvas.save();
  82. canvas.translate(10,250);
  83. canvas.clipRect(0,0,60,60);
  84. canvas.clipRect(40,40,100,100,Region.Op.XOR);
  85. drawScene(canvas);
  86. canvas.restore();
  87. //右下图
  88. canvas.translate(160,250);
  89. canvas.clipRect(0,0,60,60);
  90. canvas.clipRect(40,40,100,100,Region.Op.REVERSE_DIFFERENCE);
  91. drawScene(canvas);
  92. canvas.restore();
  93. }
  94. privatevoiddrawScene(Canvascanvas){
  95. canvas.clipRect(0,0,100,100);
  96. canvas.drawColor(Color.WHITE);
  97. paint.setColor(Color.RED);
  98. canvas.drawLine(0,0,100,100,paint);
  99. paint.setColor(Color.GREEN);
  100. canvas.drawCircle(30,70,30,paint);
  101. paint.setColor(Color.BLUE);
  102. canvas.drawText("ChenJianLi",100,30,paint);
  103. }
  104. }

MatrixDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importcom.test.R;
  3. importandroid.content.Context;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.Canvas;
  6. importandroid.graphics.Matrix;
  7. importandroid.graphics.Paint;
  8. importandroid.graphics.drawable.BitmapDrawable;
  9. importandroid.view.View;
  10. /**
  11. *在Android里面,Matrix由9个float值构成,是一个3*3的矩阵。
  12. *cosX,-sinX,translateX
  13. *sinX,cosX,translateY
  14. *0,0,scale
  15. *解释一下,上面的sinX和cosX,表示旋转角度的cos值和sin值,注意,
  16. *旋转角度是按顺时针方向计算的。translateX和translateY表示x和y的平移量。
  17. *scale是缩放的比例,1是不变,2是表示缩放1/2,
  18. *@authoremmet1988.iteye.com
  19. *
  20. */
  21. publicclassMatrixDrawextendsViewimplementsRunnable{
  22. Bitmapbitmap;
  23. Matrixmatrix=newMatrix();
  24. Paintpaint;
  25. publicMatrixDraw(Contextcontext){
  26. super(context);
  27. bitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.rotate_surfaceview)).getBitmap();
  28. paint=newPaint();
  29. paint.setAntiAlias(true);
  30. newThread(this).start();
  31. }
  32. floatm;
  33. floatn;
  34. @Override
  35. protectedvoidonDraw(Canvascanvas){
  36. /*
  37. floatcosValue=(float)Math.cos(-Math.PI/m);
  38. floatsinValue=(float)Math.sin(-Math.PI/m);
  39. Log.d("matrixdraw","Math.PI="+Math.PI);
  40. Log.d("matrixdraw","Math.PI/m="+Math.PI/m);
  41. Log.d("matrixdraw","Math.cos(-Math.PI/m)="+(float)Math.cos(-Math.PI/m));
  42. Log.d("matrixdraw","Math.sin(-Math.PI/m)="+(float)Math.sin(-Math.PI/m));
  43. matrix.setValues(newfloat[]{
  44. cosValue,-sinValue,100,
  45. sinValue,cosValue,100,
  46. 0,0,2
  47. });//举例,若缩放值为0.9,代表放大原图的十分之一
  48. //super.onDraw(canvas);//当然,如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
  49. //Matrixmatrix2=newMatrix(matrix);
  50. canvas.drawBitmap(bitmap,matrix,paint);
  51. //canvas.drawBitmap(bitmap,matrix2,paint);
  52. */
  53. n++;
  54. if(n==60){
  55. n=0;
  56. }
  57. matrix.postRotate(n);
  58. matrix.postTranslate(n,n);
  59. matrix.postScale(1,1,n,n);
  60. canvas.drawBitmap(bitmap,matrix,paint);
  61. }
  62. @Override
  63. publicvoidrun(){
  64. while(!Thread.currentThread().isInterrupted()){
  65. try{
  66. Thread.sleep(100);
  67. postInvalidate();
  68. }catch(InterruptedExceptione){
  69. Thread.currentThread().interrupt();
  70. }
  71. }
  72. }
  73. /**
  74. *以左上角为顶点,缩放一半,逆时针旋转30度,
  75. *然后沿x轴和y轴分别平移50个像素,
  76. *代码里面写的是100,为什么是平移50呢,
  77. *因为缩放了一半。
  78. *大家可以自己设置一下Matrix的值,或者尝试一下两个
  79. *Matrix相乘,得到的值设置进去,
  80. *这样才能对Matrix更加熟练。
  81. */
  82. }

Matrix2Draw.java

Java代码 收藏代码
  1. publicclassMatrix2DrawextendsView{
  2. privateBitmapmBitmap;
  3. privateMatrixmMatrix=newMatrix();
  4. publicMatrix2Draw(Contextcontext){
  5. super(context);
  6. initialize();
  7. }
  8. privatevoidinitialize(){
  9. Bitmapbmp=((BitmapDrawable)getResources().getDrawable(R.drawable.rotate_surfaceview)).getBitmap();
  10. mBitmap=bmp;
  11. /*首先,将缩放为100*100。这里scale的参数是比例。有一点要注意,如果直接用100/
  12. bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是float型的,
  13. 直接用100f就好。*/
  14. mMatrix.setScale(100f/bmp.getWidth(),100f/bmp.getHeight());
  15. /*//post方式:后乘>>当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
  16. //平移到(100,100)处
  17. mMatrix.postTranslate(100,100);
  18. //倾斜x和y轴,以(100,100)为中心。
  19. mMatrix.postSkew(0.2f,0.2f,100,100);*/
  20. //pre方式:前乘>>参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。
  21. //平移到(100,100)处
  22. mMatrix.preTranslate(100,100);
  23. //倾斜x和y轴,以(100,100)为中心。
  24. mMatrix.preSkew(0.2f,0.2f,100,100);
  25. }
  26. @OverrideprotectedvoidonDraw(Canvascanvas){
  27. //super.onDraw(canvas);//如果界面上还有其他元素需要绘制,只需要将这句话写上就行了。
  28. Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  29. canvas.drawBitmap(mBitmap,mMatrix,paint);
  30. }
  31. }
  32. /**
  33. Matrix的操作:
  34. 总共分为translate(平移),rotate(旋转),scale(缩放)和skew(倾斜)四种,每一种变换在
  35. Android的API里都提供了set,post和pre三种操作方式,除了translate,其他三种操作都可以指定中心点。
  36. set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。
  37. post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,来完成所需的整个变换。
  38. pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。
  39. 旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,是围绕(0,0)点来进行。
  40. */

SimpleDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Color;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.Rect;
  7. importandroid.view.View;
  8. publicclassSimpleDrawextendsViewimplementsRunnable{
  9. /*
  10. *我们继续来介绍Android平台底层绘图类的相关内容,在AndroidUI开发专题(一)
  11. *之界面设计中我们介绍了有关Android平台资源使用以及Bitmap相关类的操作
  12. *,接下来将会以实例的方式给大家演示各种类的用处以及注意点。今天我们继续
  13. *了解android.graphics包中比较重要的绘图类。
  14. *
  15. *一、android.graphics.Matrix有关图形的变换、缩放等相关操作常用的方法有:
  16. *Java代码:voidreset()//重置一个matrix对象。
  17. *voidset(Matrixsrc)//复制一个源矩阵,和本类的构造方法Matrix(Matrixsrc)一样
  18. *booleanisIdentity()//返回这个矩阵是否定义(已经有意义)
  19. *voidsetRotate(floatdegrees)//指定一个角度以0,0为坐标进行旋转
  20. *voidsetRotate(floatdegrees,floatpx,floatpy)//指定一个角度以px,py为坐标进行旋转
  21. *voidsetScale(floatsx,floatsy)//缩放
  22. *voidsetScale(floatsx,floatsy,floatpx,floatpy)//以坐标px,py进行缩放
  23. *voidsetTranslate(floatdx,floatdy)//平移
  24. *voidsetSkew(floatkx,floatky,floatpx,floatpy)//以坐标px,py进行倾斜
  25. *voidsetSkew(floatkx,floatky)//倾斜复制代码二、android.graphics.NinePatch
  26. *
  27. *NinePatch是Android平台特有的一种非矢量图形自然拉伸处理方法,可以帮助常规的
  28. *图形在拉伸时不会缩放,
  29. *实例中Android开发网提示大家对于Toast的显示就是该原理,同时SDK中提供了一
  30. *个工具名为Draw
  31. *9-Patch,有关该工具的使用方法可以参考我们经发布的Draw
  32. *9-Patch使用方法介绍一文。由于该类提供了高质量支持透明的缩放方式,所以图形
  33. *格式为PNG,文件命名方式为.9.png
  34. *的后缀比如eoeandroid。
  35. *
  36. *三、android.graphics.Paint。Paint类我们可以理解为画笔、画刷的属性定义,本类
  37. *常用的方法如下:
  38. *
  39. *Java代码:voidreset()//重置
  40. *voidsetARGB(inta,intr,intg,intb)或voidsetColor(intcolor)
  41. *//均为设置Paint对象的颜色
  42. *voidsetAntiAlias(booleanaa)
  43. *
  44. *//是否抗锯齿,需要配合voidsetFlags(Paint.ANTI_ALIAS_FLAG)来帮助消除锯齿
  45. *使其边缘更平滑。
  46. *ShadersetShader(Shadershader)
  47. *
  48. *//设置阴影,Shader类是一个矩阵对象,如果为NULL将清除阴影。
  49. *voidsetStyle(Paint.Stylestyle)//设置样式,一般为FILL填充,或者STROKE凹陷
  50. *效果。
  51. *voidsetTextSize(floattextSize)//设置字体大小
  52. *voidsetTextAlign(Paint.Alignalign)//文本对齐方式
  53. *TypefacesetTypeface(Typefacetypeface)
  54. *//设置字体,通过Typeface可以加载Android内部的字体,一般为宋体对于中文,
  55. *部分ROM可以自己添加比如雅黑等等
  56. *voidsetUnderlineText(booleanunderlineText)
  57. *
  58. *//是否设置下划线,需要撇和voidsetFlags(Paint.UNDERLINE_TEXT_FLAG)方法。复制代码
  59. *四、android.graphics.Rect
  60. *
  61. *Rect我们可以理解为矩形区域,类似的还有Point一个点,Rect类除了表示一个矩
  62. *形区域位置描述外,
  63. *eoeandroid提示主要可以帮助我们计算图形之间是否碰撞
  64. *(包含)关系,对于Android游戏开发比较有用,其主要的成员contains包含了三种
  65. *重载方法,来判断包含关系.
  66. *
  67. *Java代码:
  68. *booleancontains(intleft,inttop,intright,intbottom)
  69. *booleancontains(intx,inty)
  70. *
  71. *booleancontains(Rectr)复制代码五、android.graphics.Region
  72. *Region在Android平台中表示一个区域和Rect不同的是
  73. *,它表示的是一个不规则的样子,可以是椭圆、多边形等等,而Rect仅仅是矩形。
  74. *同样Region的booleancontains(intx,
  75. *inty)成员可以判断一个点是否在该区域内。
  76. *
  77. *六、android.graphics.Typeface
  78. *Typeface类是帮助描述一个字体对象,在TextView中通过使用setTypeface方法来
  79. *制定一个输出文本的字体
  80. *,其直接构造调用成员create方法可以直接指定一个字体名称和样式,比如
  81. *Java代码:staticTypefacecreate(Typefacefamily,intstyle)
  82. *
  83. *staticTypefacecreate(StringfamilyName,intstyle)复制代码
  84. *同时使用isBold和isItalic方法可以判断出是否包含粗体或斜体的字型。
  85. *
  86. *Java代码:finalbooleanisBold()
  87. *finalbooleanisItalic()复制代码该类的创建方法还有从apk的资源或从一个具体的
  88. *文件路径,其具体方法为
  89. *Java代码:staticTypefacecreateFromAsset(AssetManagermgr,Stringpath)
  90. *staticTypefacecreateFromFile(Filepath)
  91. *staticTypefacecreateFromFile(Stringpath)复制代码
  92. */
  93. privatePaintpaint;
  94. publicSimpleDraw(Contextcontext){
  95. super(context);
  96. paint=newPaint();
  97. newThread(this).start();
  98. }
  99. @Override
  100. protectedvoidonDraw(Canvascanvas){
  101. super.onDraw(canvas);
  102. canvas.drawColor(Color.GRAY);//
  103. paint.setAntiAlias(true);//
  104. canvas.save();//
  105. canvas.clipRect(10,10,110,110);//
  106. canvas.drawColor(Color.WHITE);//
  107. //canvas.rotate(m);//以屏幕左上角为坐标原点旋转
  108. m+=45.0f;
  109. if(m==360.0f){
  110. m=0.0f;
  111. }
  112. canvas.rotate(m,60,60);//以(60,60)为原点旋转
  113. paint.setColor(Color.GREEN);
  114. canvas.drawRect(newRect(50,50,70,70),paint);
  115. canvas.restore();
  116. canvas.save();
  117. canvas.translate(140,10);
  118. canvas.clipRect(0,0,100,100);//一定要先剪辑出矩形区域再设画布背景,
  119. //否则会覆盖整张画布
  120. canvas.drawColor(Color.BLACK);
  121. paint.setColor(Color.BLUE);
  122. canvas.drawRect(newRect(10,10,50,50),paint);
  123. canvas.restore();
  124. //
  125. canvas.save();
  126. canvas.translate(120,120);
  127. canvas.clipRect(newRect(0,0,100,100));
  128. canvas.drawColor(Color.GREEN);
  129. //paint.setColor(Color.BLUE);
  130. paint.setStrokeWidth(4);
  131. paint.setColor(Color.BLACK);
  132. canvas.drawLine(0,60,100,60,paint);
  133. paint.setARGB(255,51,51,51);
  134. paint.setTextSize(20);
  135. paint.setFlags(Paint.ANTI_ALIAS_FLAG);
  136. paint.setUnderlineText(true);
  137. //paint.setFlags(Paint.UNDERLINE_TEXT_FLAG);
  138. canvas.drawText("陈建立",25,80,paint);
  139. paint.setColor(Color.WHITE);
  140. canvas.drawRect(newRect(10,10,50,50),paint);
  141. canvas.restore();
  142. }
  143. floatm=0.0f;
  144. publicvoidrun(){
  145. while(!Thread.currentThread().isInterrupted()){
  146. try{
  147. Thread.sleep(500);//每半秒执行一次
  148. }catch(InterruptedExceptione){
  149. Thread.currentThread().interrupt();
  150. }
  151. postInvalidate();
  152. }
  153. }
  154. }

TextDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importandroid.content.Context;
  3. importandroid.graphics.Canvas;
  4. importandroid.graphics.Color;
  5. importandroid.graphics.Paint;
  6. importandroid.graphics.Paint.FontMetrics;
  7. importandroid.util.Log;
  8. importandroid.view.View;
  9. publicclassTextDrawextendsView{
  10. publicTextDraw(Contextcontext){
  11. super(context);
  12. }
  13. @Override
  14. protectedvoidonDraw(Canvascanvas){
  15. super.onDraw(canvas);
  16. PainttextPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  17. textPaint.setTextSize(35);
  18. textPaint.setColor(Color.WHITE);
  19. //FontMetrics
  20. FontMetricsfontMetrics=textPaint.getFontMetrics();
  21. Stringtext="abcdefghijklm";
  22. //
  23. floatbaseX=0;
  24. floatbaseY=100;
  25. Log.d("textDraw","top="+fontMetrics.top+
  26. "ascent="+fontMetrics.ascent+
  27. "descent="+fontMetrics.descent+
  28. "bottom="+fontMetrics.bottom+"\n");
  29. floattopY=baseY+fontMetrics.top;
  30. floatascentY=baseY+fontMetrics.ascent;
  31. floatdescentY=baseY+fontMetrics.descent;
  32. floatbottomY=baseY+fontMetrics.bottom;
  33. Log.d("textDraw","topY="+topY+
  34. "ascentY="+ascentY+
  35. "descentY="+descentY+
  36. "bottomY="+bottomY);
  37. //
  38. canvas.drawText(text,baseX,baseY,textPaint);
  39. //BaseLine
  40. PaintbaseLinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  41. baseLinePaint.setColor(Color.RED);
  42. canvas.drawLine(0,baseY,getWidth(),baseY,baseLinePaint);
  43. //Base
  44. canvas.drawCircle(baseX,baseY,5,baseLinePaint);
  45. //TopLine
  46. PainttopLinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  47. topLinePaint.setColor(Color.LTGRAY);
  48. canvas.drawLine(0,topY,getWidth(),topY,topLinePaint);
  49. //AscentLine
  50. PaintascentLinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  51. ascentLinePaint.setColor(Color.GREEN);
  52. canvas.drawLine(0,ascentY,getWidth(),ascentY,ascentLinePaint);
  53. //DescentLine
  54. PaintdescentLinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  55. descentLinePaint.setColor(Color.YELLOW);
  56. canvas.drawLine(0,descentY,getWidth(),descentY,descentLinePaint);
  57. //ButtomLine
  58. PaintbottomLinePaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  59. bottomLinePaint.setColor(Color.MAGENTA);
  60. canvas.drawLine(0,bottomY,getWidth(),bottomY,bottomLinePaint);
  61. }
  62. }

RoundAndReflectionDraw.java

Java代码 收藏代码
  1. classRoundImageViewextendsView{
  2. privateBitmapbitmap;
  3. intbitmapWidth;
  4. intbitmapHeight;
  5. publicRoundImageView(Contextcontext){
  6. super(context);
  7. bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.rotate_surfaceview);
  8. bitmapWidth=bitmap.getWidth();
  9. bitmapHeight=bitmap.getHeight();
  10. }
  11. @Override
  12. protectedvoidonDraw(Canvascanvas){
  13. super.onDraw(canvas);
  14. //第一种方法:
  15. /*BitmaproundBitmap=Bitmap.createBitmap(bitmapWidth,bitmapHeight,Bitmap.Config.ARGB_8888);
  16. canvas=newCanvas(roundBitmap);
  17. Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  18. paint.setColor(Color.BLUE);
  19. canvas.drawRoundRect(newRectF(0,0,bitmapWidth,bitmapHeight),20.0f,20.0f,paint);
  20. paint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.DST_IN));
  21. canvas.drawBitmap(bitmap,0,0,null);
  22. canvas.drawBitmap(roundBitmap,0,0,paint);*/
  23. //第二种方法:
  24. Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  25. paint.setColor(0xffffffff);
  26. paint.setTextSize(15);
  27. canvas.drawText("生成带圆角的图片",10,25,paint);
  28. canvas.drawBitmap(getRoundedCornerBitmap(bitmap),10,30,paint);
  29. canvas.drawText("生成带倒影的图片",170,160,paint);
  30. canvas.drawBitmap(createReflectionImageWithOrigin(bitmap),170,165,paint);
  31. }
  32. publicBitmapgetRoundedCornerBitmap(Bitmapbitmap){
  33. //创建一个指定宽度和高度的空位图对象
  34. Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),Config.ARGB_8888);
  35. //用该位图创建画布
  36. Canvascanvas=newCanvas(output);
  37. //画笔对象
  38. finalPaintpaint=newPaint();
  39. //画笔的颜色
  40. finalintcolor=0xff424242;
  41. //矩形区域对象
  42. finalRectrect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());
  43. //未知
  44. finalRectFrectF=newRectF(rect);
  45. //拐角的半径
  46. finalfloatroundPx=12;
  47. //消除锯齿
  48. paint.setAntiAlias(true);
  49. //画布背景色
  50. canvas.drawARGB(0,0,0,0);
  51. //设置画笔颜色
  52. paint.setColor(color);
  53. //绘制圆角矩形
  54. canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  55. //未知
  56. paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  57. //把该图片绘制在该圆角矩形区域中
  58. canvas.drawBitmap(bitmap,rect,rect,paint);
  59. //最终在画布上呈现的就是该圆角矩形图片,然后我们返回该Bitmap对象
  60. returnoutput;
  61. }
  62. //获得带倒影的图片方法
  63. publicBitmapcreateReflectionImageWithOrigin(Bitmapbitmap){
  64. //图片与倒影之间的距离间隔
  65. finalintreflectionGap=2;
  66. //原图的宽度
  67. intwidth=bitmap.getWidth();
  68. //原图的高度
  69. intheight=bitmap.getHeight();
  70. //图片旋转,缩放等控制对象
  71. Matrixmatrix=newMatrix();
  72. //缩放(这里pre,set,post三种效果是不一样的,注意区别)
  73. matrix.preScale(1,-1);
  74. /**
  75. set是直接设置Matrix的值,每次set一次,整个Matrix的数组都会变掉。
  76. post是后乘,当前的矩阵乘以参数给出的矩阵。可以连续多次使用post,
  77. 来完成所需的整个变换。例如,要将一个图片旋
  78. 转30度,然后平移到(100,100)的地方,那么可以这样做:
  79. Matrixm=newMatrix();
  80. m.postRotate(30);
  81. m.postTranslate(100,100);
  82. 这样就达到了想要的效果。
  83. pre是前乘,参数给出的矩阵乘以当前的矩阵。所以操作是在当前矩阵的最前面发生的。
  84. 例如上面的例子,如果用pre的话,就要这样:
  85. Matrixm=newMatrix();
  86. m.setTranslate(100,100);
  87. m.preRotate(30);
  88. 旋转、缩放和倾斜都可以围绕一个中心点来进行,如果不指定,默认情况下,
  89. 是围绕(0,0)点来进行。
  90. 关于缩放:
  91. scale的参数是比例。例如,我们缩放为100%,则有一点要注意,如果直接用
  92. 100/bmp.getWidth()的话,会得到0,因为是整型相除,所以必须其中有一个是
  93. float型的,直接用100f就好。
  94. 如:matrix.setScale(100f/bmp.getWidth(),100f/bmp.getHeight());
  95. */
  96. //创建一个初始的倒影位图
  97. BitmapreflectionImage=Bitmap.createBitmap(bitmap,0,height/2,width,height/2,matrix,false);
  98. //新建一个宽度为原图宽度,高度为原图高度的3/2的位图,用于绘制新的位图,即整体的效果图位图对象
  99. BitmapbitmapWithReflection=Bitmap.createBitmap(width,(height+height/2),Config.ARGB_8888);
  100. //由该位图对象创建初始画布(规定了画布的宽高)
  101. Canvascanvas=newCanvas(bitmapWithReflection);
  102. //在该画布上绘制原图
  103. canvas.drawBitmap(bitmap,0,0,null);
  104. //创建一个画笔
  105. PaintdeafalutPaint=newPaint();
  106. //绘制一个矩形区域,该矩形区域便是原图和倒影图之间的间隔图
  107. canvas.drawRect(0,height,width,height+reflectionGap,deafalutPaint);
  108. //绘制该倒影图于间隔图的下方
  109. canvas.drawBitmap(reflectionImage,0,height+reflectionGap,null);
  110. //创建一个画笔
  111. Paintpaint=newPaint();
  112. //创建一个线性渐变对象
  113. LinearGradientshader=newLinearGradient(
  114. 0,bitmap.getHeight(),
  115. 0,bitmapWithReflection.getHeight()+reflectionGap,
  116. 0x70ffffff,0x00ffffff,
  117. TileMode.CLAMP
  118. );
  119. //把渐变效果应用在画笔上
  120. paint.setShader(shader);
  121. //SettheTransfermodetobeporterduffanddestinationin
  122. //未知
  123. paint.setXfermode(newPorterDuffXfermode(Mode.DST_IN));
  124. //Drawarectangleusingthepaintwithourlineargradient
  125. //绘制出该渐变效果,也就是最终的倒影效果图
  126. canvas.drawRect(0,height,width,bitmapWithReflection.getHeight()+reflectionGap,paint);
  127. //返回
  128. returnbitmapWithReflection;
  129. }
  130. }
  131. /**
  132. *绘制圆角背景以及图片圆角的处理
  133. .配置文件实现
  134. <?xmlversion="1.0"encoding="utf-8"?>
  135. <layer-list
  136. *xmlns:android="http://schemas.android.com/apk/res/android"><item
  137. *android:drawable="@drawable/icon_home_button_img"/><item
  138. *android:drawable="@drawable/icon_home_shape_overlay"/>
  139. *</layer-list>
  140. *icon_home_shape_overlay如下
  141. *<?xmlversion="1.0"encoding="utf-8"?>
  142. *<shape
  143. *xmlns:android="http://schemas.android.com/apk/res/android"><solid
  144. *android:color="#60000000"/>
  145. *<strokeandroid:width="3dp"
  146. *color="#ff000000"/>
  147. *<cornersandroid:radius="10dp"/>
  148. *</shape>
  149. *或者直接使用一种效果
  150. *<?xmlversion="1.0"encoding="UTF-8"?>
  151. *<shape
  152. *xmlns:android="http://schemas.android.com/apk/res/android">
  153. *<solid
  154. *android:color="#99FFFFFF"/>
  155. *<cornersandroid:radius="30px"/>
  156. *<padding
  157. *android:left="0dp"android:top="0dp"android:right="0dp"
  158. *android:bottom="0dp"/>
  159. *</shape>
  160. *然后
  161. *android:background="@drawable/my_shape_file"
  162. *
  163. *
  164. *2.图片本身加上圆角BitmapmyCoolBitmap=...;//<--Yourbitmapyouwantrounded
  165. *
  166. *intw=myCoolBitmap.getWidth(),h=myCoolBitmap.getHeight();
  167. *Bitmaprounder=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);Canvas
  168. *canvas=newCanvas(rounder);
  169. *
  170. *PaintxferPaint=newPaint(Paint.ANTI_ALIAS_FLAG);
  171. *xferPaint.setColor(Color.RED);
  172. *
  173. *canvas.drawRoundRect(newRectF(0,0,w,h),20.0f,20.0f,xferPaint);
  174. *
  175. *xferPaint.setXfermode(newPorterDuffXfermode(PorterDuff.Mode.DST_IN));
  176. *canvas.drawBitmap(myCoolBitmap,0,0,null);
  177. *canvas.drawBitmap(rounder,0,0,xferPaint);
  178. *或者
  179. *publicstaticBitmapgetRoundedCornerBitmap(Bitmapbitmap){
  180. *Bitmapoutput=Bitmap.createBitmap(bitmap.getWidth(),
  181. *bitmap.getHeight(),Config.ARGB_8888);
  182. *Canvascanvas=newCanvas(output);
  183. *
  184. *finalintcolor=0xff424242;finalPaintpaint=newPaint();finalRect
  185. *rect=newRect(0,0,bitmap.getWidth(),bitmap.getHeight());finalRectF
  186. *rectF=newRectF(rect);finalfloatroundPx=12;
  187. *
  188. *paint.setAntiAlias(true);canvas.drawARGB(0,0,0,0);
  189. *paint.setColor(color);canvas.drawRoundRect(rectF,roundPx,roundPx,paint);
  190. *
  191. *paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
  192. *canvas.drawBitmap(bitmap,rect,rect,paint);
  193. *
  194. *returnoutput;
  195. *}
  196. */

SurfaceViewDraw.java

Java代码 收藏代码
  1. packagecom.view;
  2. importcom.test.R;
  3. importandroid.content.Context;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.BitmapFactory;
  6. importandroid.graphics.Canvas;
  7. importandroid.graphics.Matrix;
  8. importandroid.graphics.Paint;
  9. importandroid.graphics.Rect;
  10. importandroid.util.Log;
  11. importandroid.view.SurfaceHolder;
  12. importandroid.view.SurfaceView;
  13. /**
  14. *http://wallage.blog.163.com/blog/static/173896242010101232220959/
  15. *@authoremmet1988.iteye.com
  16. *
  17. */
  18. publicclassSurfaceViewDrawextendsSurfaceViewimplementsRunnable,SurfaceHolder.Callback{
  19. privateBitmapbackgroundBitmap;
  20. privateBitmaprotateBitmap;
  21. SurfaceHoldersurfaceHolder;
  22. publicSurfaceViewDraw(Contextcontext){
  23. super(context);
  24. backgroundBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.background_surfaceview);
  25. rotateBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.rotate_surfaceview);
  26. surfaceHolder=this.getHolder();
  27. surfaceHolder.addCallback(this);
  28. }
  29. publicvoidsurfaceCreated(SurfaceHolderholder){
  30. newThread(this).start();
  31. Log.d("surfaceview","surfaceCreated");
  32. }
  33. publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
  34. intheight){
  35. Log.d("surfaceview","surfaceChanged");
  36. }
  37. publicvoidsurfaceDestroyed(SurfaceHolderholder){
  38. Log.d("surfaceview","surfaceDestroyed");
  39. }
  40. @Override
  41. publicvoidrun(){
  42. Log.d("surfaceview","run");
  43. Canvascanvas=null;
  44. introtateValue=0;//旋转角度
  45. intframeCount=0;//帧计数器
  46. while(!Thread.currentThread().isInterrupted()){
  47. try{
  48. //canvas=surfaceHolder.lockCanvas();//获取画布对象(获取整个屏幕的画布)
  49. canvas=surfaceHolder.lockCanvas(newRect(10,10,240,250));//获取某个区域的画布
  50. Paintpaint=newPaint();
  51. Log.d("surfaceview","rotateValue"+rotateValue+"|frameCount"+frameCount);
  52. if(frameCount++<2){//仅在第一次绘制时绘制背景
  53. /*
  54. *这里为什么设置成<2,而不是1,是由于SurfaceView本身的双缓冲技术。
  55. 覆盖刷新其实就是将每次的新的图形绘制到上一帧去,
  56. 所以如果图像是半透明的,就要考虑重复叠加导致的问题了,
  57. 而如果是完全不透明的图形则不会有任何问题。
  58. 背景会在背景图和黑色背景之间来回闪。
  59. 这个问题其实是源于SurfaceView的双缓冲机制,我理解就是它会缓冲
  60. 前两帧的图像交替传递给后面的帧用作覆盖,这样由于我们仅在第一帧
  61. 绘制了背景,第二帧就是无背景状态了,且通过双缓冲机制一直保持下
  62. 来,解决办法就是改为在前两帧都进行背景绘制。
  63. */
  64. canvas.drawBitmap(backgroundBitmap,0,0,paint);//绘制背景
  65. }
  66. //创建矩阵以控制图片的旋转和平移
  67. Matrixmatrix=newMatrix();
  68. rotateValue+=40;
  69. matrix.setRotate(rotateValue,rotateBitmap.getWidth()/2,rotateBitmap.getHeight()/2);
  70. //matrix.postRotate(rotateValue,rotateBitmap.getWidth()/2,rotateBitmap.getHeight()/2);
  71. //matrix.setTranslate(100,rotateValue);
  72. if(rotateValue==360){
  73. rotateValue=0;
  74. }
  75. matrix.setTranslate(80,50);//设置左边距和上边距
  76. //绘制问号
  77. Log.d("surfaceview","canvas"+canvas);
  78. Log.d("surfaceview","rotateBitmap"+rotateBitmap);
  79. Log.d("surfaceview","matrix"+matrix);
  80. Log.d("surfaceview","paint"+paint);
  81. if(canvas!=null){
  82. canvas.drawBitmap(rotateBitmap,matrix,paint);
  83. //解锁画布,提交画好的图像
  84. surfaceHolder.unlockCanvasAndPost(canvas);
  85. }
  86. Thread.sleep(30);
  87. }catch(InterruptedExceptione){
  88. Thread.currentThread().interrupt();
  89. Log.d("surfaceview","InterruptedException");
  90. }finally{
  91. Log.d("surfaceview","finally");
  92. }
  93. }
  94. }
  95. }

分享到:
评论

相关推荐

    Android高级编程--源代码

    在每章的讲解中,它会让你通过一系列示例项目逐步掌握Android中的各种新功能和技术,助你取得最圆满的学习效果。本书所介绍的各个应用实例简明扼要且极具实用价值,它们覆盖了Android 1.0的所有基本功能和高级功能...

    Android Canvas绘图Demo

    Android Canvas绘图演示代码

    Android绘图板源代码

    Android2.2以上,只在480*848的屏幕上测试过,其他屏幕的不保证。实现的功能包括: 绘制效果 1.水彩笔:50种颜色选择 2.蜡笔:68种颜色选择 3.颜料笔:52种颜色选择 绘制图形 1.可绘制11种图形(实心或空心) 2.提供...

    Android中Canvas绘图基础详解

    该代码是一个完整的Android工程,详细演示如了如何使用Android中的各种drawXXX方法,以及画笔Paint如何影响绘制的效果。 具体参见博文: http://blog.csdn.net/iispring/article/details/49770651

    AndroidStudio蓝牙接收数据绘图

    修改大佬的代码用于AndroidStudio,可以连接蓝牙和接收温度数据并绘制温度曲线

    android简单的画图板实现代码

    这是一款android的画图板实现代码,基本功能齐全,适合初学者开发的例子程序。

    Android 2D绘图小例子

    主要介绍了Android 2D绘图相关API使用。

    Android实例代码

    7.2、绘图:Canvas; Paint; Path; 7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; ...

    Android群英传(套装共2册)pdf及配套源代码

    《Android群英传》共分为13章,讲解了Android体系与系统架构、Android开发工具新接触、Android控件架构与自定义控件详解、ListView使用技巧、Android Scroll分析、Android绘图机制与处理技巧、Android动画机制与使用...

    android多媒体学习代码

    学习android多媒体的开发案例代码,包括绘图,动画,视频,照相机

    Android 画图代码和文档

    关于AChartEngine AChartEngine是为android应用而设计的绘图工具库。目前该库的最新稳定版本是0.7,支持绘制以下类型的图表:

    android绘图程序源代码

    代码片段:   public DrawView(Context context) { super(context); mPaints = new Paint[4]; mUseCenters = new boolean[4]; mOvals = new RectF[4]; mPaints[0] = new Paint(); mPaints[0]....

    安卓android画图程序源代码

    android画图程序源代码介绍:这是一个自动画图的程序,会自动改变图形的颜色,效果如下图所示:

    Android Surface画图游戏 示例代码

    完整工程 Android使用Surface绘图的小游戏,非常具有参考意义

    android-drawing-app, 来自 Tuts SDK的源代码.zip

    android-drawing-app, 来自 Tuts SDK的源代码 这个包含了以下 Tuts Android教程系列的演示代码。 Android SDK: 创建绘图应用程序http://code.tutsplus.com/tutorials/android-sdk-create-a-drawing

    Android安卓应用源码-涂鸦绘图&图片处理类源代码(8例).zip

    Android安卓应用源码-涂鸦绘图&图片处理类源代码(8例),可供学习及设计参考。

    Android应用源码基于android系统的画图板.zip

    Android应用源码基于android系统的画图板是一款基于android系统的画图板,主要功能是实现线条颜色...代码量相对较少感兴趣的可以看看,可以直接运用到自己的代码中。代码有清晰的注释可以方便阅读。(源码采用GBK编码)

    Android炫酷带动画效果的饼图统计绘图源代码

    本项目是一个带动画的饼图。项目代码注释比较详细,但是用的是property animation 动画效果,源码和相关包均一起打包上传了,希望能够帮到你们。

    Android经典代码例子

    Android经典代码例子,下载,视频,绘图,网络连接,图标,显示图片,listview,菜单,事件,消息,进程,解析xml,上传,短信,触摸,主题等

Global site tag (gtag.js) - Google Analytics