⑴ android繪圖之Canvas變換(6)
前面講解了Canvas的基本概念, Android繪圖之Canvas概念理解(5) ,
對Canvas的概念進行了分析,但是沒有說明和屏幕的關系,Canvas不等於屏幕,屏幕不會動的,我們也無法對屏幕進行(平移,縮放等)操作,只能對Canvas進行操作,所以對Canvas進行操作,屏幕不動,最終會導致看到的圖像不同。
下面開始講解Canvas的變幻操作:
包括:translate,rotate,scale,skew,clip,clipout,matrix
先從最簡單的平移開始:
對Canvas進行平移,
dx: x軸方向進行平移,正值向屏幕右側
dy:y軸方向進行平移,正值向屏幕下方
繪制兩個點查看原點位置。
原點顯然改變了,以後再繪制任何形狀都是以translate後的原點開始繪制。
參數說明
sx:橫向的縮放,默認為1,小數縮小,整數放大
sy:縱向的縮放,默認為1,小數縮小,整數放大
px,py,看源碼知道是先translate,執行sx,sy然後再translate反方向。
第二次translate的坐標為(-px sx,-px sy),最終的效果就是px,py是縮放後不動的點。
縮放後坐標減半。
如果想控制縮放後的位置,如何控制呢,這就需要第二個函數。
還可以控制其他位置,例如控制縮放後在中心。
rotate有兩個函數:
rotate(float degrees)
rotate(float degrees, float px, float py)
Degree:旋轉的角度,正值為順時針,負值為逆時針
Px,py:旋轉的中心,如果不指定旋轉中心默認為(0,0)點
指定旋轉中心為矩形中心
參數說明:
sx:畫布在x方向上傾斜相應的角度,sx傾斜角度的tan值,
sy:畫布在y軸方向上傾斜相應的角度,sy為傾斜角度的tan值,
根據矩形或者路徑裁剪畫布,畫布被切割之後,只有部分區域可用,其他區域無法繪制內容。
Clip函數切割的區域可用,clipOut未被切割的區域可用。(過時函數不再講解)
Matrix提供了一些方法來控制變換:
android繪圖之Paint(1)
android繪圖之Canvas基礎(2)
Android繪圖之Path(3)
Android繪圖之drawText繪制文本相關(4)
Android繪圖之Canvas概念理解(5)
Android繪圖之Canvas變換(6)
Android繪圖之Canvas狀態保存和恢復(7)
Android繪圖之PathEffect (8)
Android繪圖之LinearGradient線性漸變(9)
Android繪圖之SweepGradient(10)
Android繪圖之RadialGradient 放射漸變(11)
Android繪制之BitmapShader(12)
Android繪圖之ComposeShader,PorterDuff.mode及Xfermode(13)
Android繪圖之drawText,getTextBounds,measureText,FontMetrics,基線(14)
Android繪圖之貝塞爾曲線簡介(15)
Android繪圖之PathMeasure(16)
Android 動態修改漸變 GradientDrawable
⑵ Android canvas.drawBitmap() 繪制圖片大小的問題
你繪圖的塵汪控制項是不是足夠大?像素密度有沒有計算進去?bitmap直接可以判斷大派拆仔小的,御顫單位是px。你打log把該輸出的輸出一下看看。
⑶ android canvas scale函數能擴大畫布canvas大小嗎
您好,很高興能幫助您
感覺用 canvas scale函授後,canvas上的圖像變大了,但是超出canvas的圖緩租像沒有了.... 是不是scale只改變圖片,不改變canvas大小!
你的采擾喚兆納是我前進的動力,
記得好評和採納,答鏈檔題不易,互相幫助,
⑷ Android canvas繪制的可滑動刻度尺
首先放上所有成員變數
以上用到的方法
本Demo是使用Canvas進行繪制刻度,為了適配不同寬度的屏幕,所以小的刻度使用從中心指針處向兩邊繪制到屏幕邊界的方法,使用GestureDetector接管View的觸摸事件,在onScroll中修改體重值並不斷進行重繪,達到刻度尺滾動的效果。並在onFling中接收拋動的事件,開啟一個屬性動畫達到平滑的效果。由於我沒有在GestureDetector中找到能響應不fling的up事件,所以要自己手動在onTouchEvent中寫ACIONT_UP時的動作
遮罩層的實現方式,是drawRec 一個整個畫布大小的白色矩形,使用線性漸變,兩邊不透明到中間透明。注意,由於使用了PorterDuff.Mode.MULTIPLY來合成,所以需要使用到離屏緩沖,關於離屏緩沖可以看看 HenCoder
最後附上github: https://github.com/Pro47x/BodyWeightScaleTableView
⑸ android canvas畫文字 怎麼算出最合適的文字大小
Canvas相當於畫布,字體的大小格式在Paint上設置才正確, Paint 相當於畫筆。代碼如下,沒有具體參數:希望能幫到你
Paint paint = new Paint();
paint.setTextSize(textSize);//設置字體大小
paint.setTypeface(typeface);//設置字體類型
canvas.drawText(text, x, y, paint);//使用畫筆paint