android 绘画,Android绘图基础
繪圖三要素
一支畫筆 Paint。
一張畫布 Canvas。
一個 Bitmap 或者一個 View 來承載這個圖形。
Paint常用屬性
setAntiAlias() 設(shè)置畫筆鋸齒效果。
setColor() 設(shè)置畫筆顏色。
setTextSize() 設(shè)置字體尺寸。
setStrokeWidth() 設(shè)置空心邊框的寬度。
setStyle() 設(shè)置畫筆的風(fēng)格。
Canvas常用draw方法
drawPoint() 畫點。
drawLine() 畫線。
drawRect() 畫矩形。
drawRoundRext() 畫圓角矩形。
drawArc() 畫弧形.扇形。
drawOval() 畫橢圓。
drawPath() 畫路徑。
drawText() 畫文本。
說明
對于drawRect(left,tob,rigth,bottom,paint)接收的四個參數(shù),當(dāng)Paint.Style為Fill的時候,是指該矩形各條邊到畫布坐標(biāo)軸的距離(一般是畫布的左頂點水平方向為X軸,垂直方向為Y軸,Y軸向下為正)。當(dāng)Paint.Style為Stroke的時候,是指該矩形邊框各條邊的中心的到畫布坐標(biāo)軸的距離。
drawPath()方法繪制的是路徑。比如我要繪制一個三角形,并顯示在ImageView上:
Bitmap bm = Bitmap.createBitmap(1000,1000, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bm);
paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE); //必須設(shè)置,否則默認(rèn)為Fill,會填充。
paint.setStrokeWidth(3.0f);
Path path = new Path();
path.moveTo(100,100);
path.lineTo(500,300);
path.lineTo(300,600);
path.close(); // 閉合曲線。
canvas.drawPath(path,paint);
imageView.setImageBitmap(bm);
其中moveTo(),方法是把起始點移動到指定位置。lineTo()是從起始點畫一條道指定點的直線。更多關(guān)于Path的知識,請參考android繪圖之Path總結(jié)。
drawArc(),drawArc(left,top,righ,bottom,startAngle,sweepAngle,useCenter,paint)是先按照給定的上下左右的距離確定一個矩形(長寬不一定要相等),然后把這個矩形的上邊為旋轉(zhuǎn)到startAngel角度,把矩形的左邊旋轉(zhuǎn)到和上邊所成的夾角為sweepAngle角度,然后用弧線連接這兩條邊的端點。其中和X軸平行的方向為0度,正數(shù)表示順時針旋轉(zhuǎn)。當(dāng)useCenter為true時,會顯示左右兩條邊,為false時,只顯示一段弧線。如繪制了一個扇形:
canvas.drawArc(100,100,300,300,30,60,true,paint);
Canvas的其他方法
Canvas.sava()
Canvas.restore()
Canvas.translate()
Canvas.rotate()
Canvas.scale()
Canvas.saveLayer()
Canvas.saveLayerAlpha()
Canvas.restoreToCount()
Canvas.clipPath()
說明
Canvas.sava()是把之前在畫布上的操作保存起來,使之后的操作在另外一個圖層上。Canvas.restore()則是把圖層合并起來。通常我們可以先調(diào)用Canvas.sava()啟用一個新的圖層,然后我們可以通過Canvas.translate()或Canvas.rotate()移動或旋轉(zhuǎn)這個新圖層,這時的坐標(biāo)都是以這個新的圖層為基準(zhǔn),此時能大大簡化我們的坐標(biāo)計算。完成繪制之后,再調(diào)用Canvas.restore()就可以了。
Canvas.saveLayer()。 public int saveLayer(RectF bounds,Paint paint,int saveFlags),可以看到這個方法可以接受一個bounds參數(shù)。和save()方法不同的地方是,save()方法不能改變新圖層的形狀,而saveLayer()方法不僅可以創(chuàng)建一個或多個不同形狀的圖層,還可以指定合并圖層的樣式。saveLayerAlpha()則是開啟一個帶透明度的圖層。
Canvas.clipPath()支持通過路徑來剪貼一塊區(qū)域。通常我們可用此方法剪貼一個區(qū)域,然后調(diào)用該Drawable的draw(canvas),來繪制一個圖形。如下代碼繪制了一個圓形的圖片。
Drawable drawable = getResources().getDrawable(R.drawable.image,null);
// 必須調(diào)用setBounds方法,因為系統(tǒng)要確定該Drawable的大小。
drawable.setBounds(0,0,1000,1000);
Path path = new Path();
path.addCircle(500,500,500,Path.Direction.CW);
canvas.clipPath(path);
drawable.draw(canvas);
imageView.setImageBitmap(bm);
注意
必須調(diào)用setBounds()。設(shè)置的bounds想當(dāng)于設(shè)定了該Drawable各條邊距離畫布坐標(biāo)軸的距離。
總結(jié)
以上是生活随笔為你收集整理的android 绘画,Android绘图基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 甩全景
- 下一篇: 为什么考C2驾照要比考C1的贵呢?