Android之Canvas用法

利用Canvas繪製大量的幾何圖形,點、直線、弧、圓、橢圓、文字、矩形、多邊形、曲線、圓角矩形,等各種形狀!

  1. public class DrawView extends View {  
  2.   
  3.     public DrawView(Context context) {  
  4.         super(context);  
  5.     }  
  6.   
  7.     @Override  
  8.     protected void onDraw(Canvas canvas) {  
  9.         super.onDraw(canvas);  
  10.         /* 
  11.          * 方法 說明 drawRect 繪製矩形 drawCircle 繪製圓形 drawOval 繪製橢圓 drawPath 繪製任意多邊形 
  12.          * drawLine 繪製直線 drawPoin 繪製點 
  13.          */  
  14.         // 創建畫筆  
  15.         Paint p = new Paint();  
  16.         p.setColor(Color.RED);// 設置紅色  
  17.   
  18.         canvas.drawText("畫圓:"1020, p);// 畫文本  
  19.         canvas.drawCircle(602010, p);// 小圓  
  20.         p.setAntiAlias(true);// 設置畫筆的鋸齒效果。 true是去除,大家一看效果就明白了  
  21.         canvas.drawCircle(1202020, p);// 大圓  
  22.   
  23.         canvas.drawText("畫線及弧線:"1060, p);  
  24.         p.setColor(Color.GREEN);// 設置綠色  
  25.         canvas.drawLine(604010040, p);// 畫線  
  26.         canvas.drawLine(1104019080, p);// 斜線  
  27.         //畫笑臉弧線  
  28.         p.setStyle(Paint.Style.STROKE);//設置空心  
  29.         RectF oval1=new RectF(150,20,180,40);  
  30.         canvas.drawArc(oval1, 180180false, p);//小弧形  
  31.         oval1.set(1902022040);  
  32.         canvas.drawArc(oval1, 180180false, p);//小弧形  
  33.         oval1.set(1603021060);  
  34.         canvas.drawArc(oval1, 0180false, p);//小弧形  
  35.   
  36.         canvas.drawText("畫矩形:"1080, p);  
  37.         p.setColor(Color.GRAY);// 設置灰色  
  38.         p.setStyle(Paint.Style.FILL);//設置填滿  
  39.         canvas.drawRect(60608080, p);// 正方形  
  40.         canvas.drawRect(6090160100, p);// 長方形  
  41.   
  42.         canvas.drawText("畫扇形和橢圓:"10120, p);  
  43.         /* 設置漸變色 這個正方形的顏色是改變的 */  
  44.         Shader mShader = new LinearGradient(00100100,  
  45.                 new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,  
  46.                         Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一個材質,打造出一個線性梯度沿著一條線。  
  47.         p.setShader(mShader);  
  48.         // p.setColor(Color.BLUE);  
  49.         RectF oval2 = new RectF(60100200240);// 設置個新的長方形,掃描測量  
  50.         canvas.drawArc(oval2, 200130true, p);  
  51.         // 畫弧,第一個參數是RectF:該類是第二個參數是角度的開始,第三個參數是多少度,第四個參數是真的時候畫扇形,是假的時候畫弧線  
  52.         //畫橢圓,把oval改一下  
  53.         oval2.set(210,100,250,130);  
  54.         canvas.drawOval(oval2, p);  
  55.   
  56.         canvas.drawText("畫三角形:"10200, p);  
  57.         // 繪製這個三角形,你可以繪製任意多邊形  
  58.         Path path = new Path();  
  59.         path.moveTo(80200);// 此點爲多邊形的起點  
  60.         path.lineTo(120250);  
  61.         path.lineTo(80250);  
  62.         path.close(); // 使這些點構成封閉的多邊形  
  63.         canvas.drawPath(path, p);  
  64.   
  65.         // 你可以繪製很多任意多邊形,比如下面畫六連形  
  66.         p.reset();//重置  
  67.         p.setColor(Color.LTGRAY);  
  68.         p.setStyle(Paint.Style.STROKE);//設置空心  
  69.         Path path1=new Path();  
  70.         path1.moveTo(180200);  
  71.         path1.lineTo(200200);  
  72.         path1.lineTo(210210);  
  73.         path1.lineTo(200220);  
  74.         path1.lineTo(180220);  
  75.         path1.lineTo(170210);  
  76.         path1.close();//封閉  
  77.         canvas.drawPath(path1, p);  
  78.         /* 
  79.          * Path類封裝複合(多輪廓幾何圖形的路徑 
  80.          * 由直線段*、二次曲線,和三次方曲線,也可畫以油畫。drawPath(路徑、油漆),要麼已填充的或撫摸 
  81.          * (基於油漆的風格),或者可以用於剪斷或畫畫的文本在路徑。 
  82.          */  
  83.           
  84.         //畫圓角矩形  
  85.         p.setStyle(Paint.Style.FILL);//充滿  
  86.         p.setColor(Color.LTGRAY);  
  87.         p.setAntiAlias(true);// 設置畫筆的鋸齒效果  
  88.         canvas.drawText("畫圓角矩形:"10260, p);  
  89.         RectF oval3 = new RectF(80260200300);// 設置個新的長方形  
  90.         canvas.drawRoundRect(oval3, 2015, p);//第二個參數是x半徑,第三個參數是y半徑  
  91.           
  92.         //畫貝塞爾曲線  
  93.         canvas.drawText("畫貝塞爾曲線:"10310, p);  
  94.         p.reset();  
  95.         p.setStyle(Paint.Style.STROKE);  
  96.         p.setColor(Color.GREEN);  
  97.         Path path2=new Path();  
  98.         path2.moveTo(100320);//設置Path的起點  
  99.         path2.quadTo(150310170400); //設置貝塞爾曲線的控制點座標和終點座標  
  100.         canvas.drawPath(path2, p);//畫出貝塞爾曲線  
  101.           
  102.         //畫點  
  103.         p.setStyle(Paint.Style.FILL);  
  104.         canvas.drawText("畫點:"10390, p);  
  105.         canvas.drawPoint(60390, p);//畫一個點  
  106.         canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//畫多個點  
  107.           
  108.         //畫圖片,就是貼圖  
  109.         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);  
  110.         canvas.drawBitmap(bitmap, 250,360, p);  
  111.     }  
  112. }  
  113. 注:本文轉載自http://blog.csdn.net/rhljiayou/article/details/7212620

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章