Paint 講解開篇
創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計服務(wù),網(wǎng)站設(shè)計,網(wǎng)站托管維護(hù)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出創(chuàng)新互聯(lián)。
android中繪制特定圖案類似顯示中的繪畫需要畫筆和畫紙,為此android提供了Paint和Canvas。
Paint和Canvas分別代表畫筆和畫布。
The Paint class holds the style and color information about how to draw geometries, text and bitmaps.
Paint類似畫筆,保存著繪制文本,圖形,圖片的樣式和顏色信息。(顏色,寬度,粗細(xì),透明度,字體樣式,字體大?。?。
提供了三種初始化方法:
Paint(),
Paint(int flags),
Paint(Paint paint)。
第二種構(gòu)造函數(shù)傳入了flag,相當(dāng)于無參構(gòu)造之后調(diào)用了setFlags(int),有很多種flag,這里舉個例子UNDERLINE_TEXT_FLAG(其他的flag見developers文檔),繪制文字時會有下劃線,多個flag或可以達(dá)到設(shè)置多個flag的目的。
Paint常用的設(shè)置函數(shù):
setAlpha()透明度
setAntiAlias()抗鋸齒
setColor(),setARGB()設(shè)置顏色
setStyle(Paint.Style style) 設(shè)置填充樣式
setStrokeCap(Paint.Cap cap) 畫筆的樣式(落筆,收筆時)
setStrokeJoin(Paint.Join join)連接點的樣式
setStrokeWidth(float width)設(shè)置畫筆寬度
setShadowLayer(float radius, float dx, float dy, int shadowColor) 設(shè)置陰影
setTextSize(float textSize) 字體大小
setTextAlign(Paint.Align.RIGHT)設(shè)置字體對齊方式
后期講解:
setColorFilter(ColorFilter filter) 設(shè)置顏色過濾
setUnderlineText(true) 下劃線
setPathEffect() 設(shè)置路徑效果
setTypeface() 設(shè)置字體風(fēng)格
setFilterBitmap() 設(shè)置圖片過濾
setXfermode(Xfermode xfermode) xfermode設(shè)置圖像混合模式
setShader(Shader shader) 設(shè)置shader包括漸變shader,圖片shader
。。。。。。。。
setAlpha(int a) 設(shè)置透明度,a 值得范圍 [0..255],僅僅改變setColor()的顏色的透明度,不改變顏色值,0是完全透明,255完全不透明。
注意:需要先調(diào)用setColor(),再調(diào)用setAlpha才會生效,否則將會被覆蓋,因為setColor中包含了alpha。
setStyle設(shè)置填充樣式,所謂填充的樣式指只繪制線或者繪制同時填充:
Paint.Style.FILL 填充內(nèi)部,會把閉合區(qū)域填充顏色
Paint.Style.FILL_AND_STROKE 填充內(nèi)部和描邊
Paint.Style.STROKE 僅描邊,僅僅繪制邊界
默認(rèn)FILL 填充內(nèi)部,
STROKE樣式
FILL_AND_STROKE樣式和FILL 類似但當(dāng)畫筆寬度很寬時會產(chǎn)生不同
setColor,setARGB設(shè)置顏色,設(shè)置畫筆的顏色,setARGB()參數(shù)范圍0-255。
setAntiAlias(boolean) 抗鋸齒,使邊界更順滑(有些屏幕分辨率不高,導(dǎo)致像素點比較大,繪制邊界可能會有顆粒感,打開抗鋸齒邊界顆粒感會減少)。
setTextSize(float textSize) 字體大小,單位是px,如果是dp要注意轉(zhuǎn)換。
setTextAlign(Paint.Align.RIGHT)設(shè)置字體對齊方式,根據(jù)下面的實例可以,對齊方式基于開始繪制的點。
一起講解:
mPaint.setTextSize(50);
mPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawText("android Paint 學(xué)習(xí) LEFT",300,300,mPaint);
mPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawText("android Paint 學(xué)習(xí) CENTER",300,400,mPaint);
mPaint.setTextAlign(Paint.Align.RIGHT);
canvas.drawText("android Paint 學(xué)習(xí) RIGHT",300,500,mPaint);
setTextAlign對齊是相對于開始繪制的坐標(biāo)點。
setShadowLayer(float radius, float dx, float dy, int shadowColor) 設(shè)置陰影
mPaint.setShadowLayer(10,-20,30,Color.GRAY);
canvas.drawText("android Paint 學(xué)習(xí) CENTER",getWidth()/2,450,mPaint);
setShadowLayer(float radius, float dx, float dy, int shadowColor)
Radius設(shè)置角度,dx,dy控制字體的上下左右出現(xiàn),有正負(fù)之分,dx的正負(fù)代表右左,dy的正負(fù)代表下上。
setStrokeCap(Paint.Cap.ROUND)
設(shè)置繪制起始點和結(jié)尾點的樣式,
三種樣式ROUND,BUTT,SQUARE
Cap.ROUND(圓形)、Cap.SQUARE(方形)、Paint.Cap.BUTT(無)
ROUND:
BUTT和SQUARE差別不大:
setStrokeJoin(Paint.Join join),設(shè)置繪制path連接點的樣式
mPaint.setStrokeJoin(Paint.Join.ROUND);
// mPaint.setStrokeJoin(Paint.Join.MITER);
// mPaint.setStrokeJoin(Paint.Join.BEVEL);
Join.MITER(結(jié)合處為銳角)、
Join.Round(結(jié)合處為圓弧)、
Join.BEVEL(結(jié)合處為直線)
ROUND樣式:
MITER樣式:
BEVEL樣式:
setXfermode(Xfermode xfermode) xfermode設(shè)置圖像混合模式
setShader(Shader shader) 設(shè)置shader包括漸變shader,圖片shader
還有很多其他屬性會后續(xù)講解。
android繪圖之Paint(1)
android繪圖之Canvas基礎(chǔ)(2)
Android繪圖之Path(3)
Android繪圖之drawText繪制文本相關(guān)(4)
Android繪圖之Canvas概念理解(5)
Android繪圖之Canvas變換(6)
Android繪圖之Canvas狀態(tài)保存和恢復(fù)(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 動態(tài)修改漸變 GradientDrawable
我感覺你描述的應(yīng)該是一種字體,導(dǎo)入字體庫即可使用。在網(wǎng)上查查你要的字體的字體庫
1.首先在res目錄下新建一個xml文件,類型選擇drawable,將自動生一個一個drawable文件(我用的sdk是android 4.1),并生成一個xml文件,在其中寫入以下代碼:
[java] view plaincopy
?xml version="1.0" encoding="utf-8"?
shape xmlns:android=""
solid android:color="#FFFFFF" /
stroke
android:width="0.01dp"
android:color="#FFFFFF" /
padding
android:bottom="1dp"
android:left="0.5dp"
android:right="0.5dp"
android:top="0dp" /
/shape
2.在要設(shè)置邊框的控件xml命令里加入:android:background=“@drawable/boder”
stroke是描邊的意思.
填充顏色為#ccc,描邊為紅色,描邊寬度為10.
Android 系統(tǒng)從5.0開始支持矢量圖,可以通過 Android Studio自帶的 Vector Assert 工具將SVG、PSD 轉(zhuǎn)成VectorDrawble。
轉(zhuǎn)化好的VectorDrawblew看起來好像挺復(fù)雜,是不是完全看不懂。沒關(guān)系,只要轉(zhuǎn)化的圖形沒有問題,你不用關(guān)心其內(nèi)部數(shù)據(jù)。
我們直接進(jìn)入矢量動畫部分。
矢量動畫的實現(xiàn)通過在xml定義animated-vector標(biāo)簽(其對應(yīng)的Java對象是AnimatedVectorDrawable)實現(xiàn),如下所示:
可以看到animated-vector標(biāo)簽是主要元素是target,它其實就起到一個橋梁作用,將動畫和VectorDraw中的圖形聯(lián)系起來。
比如target1,它將屬性動畫splash_animator_draw和vectorDrawble對象中name等于line1的對象聯(lián)系起來,即:動畫將生效在line1對象上。
之前展示了由svg圖片通過Android Studio Vector Assert工具轉(zhuǎn)換過來的VectorDrawble,里面的實際上svg畫圖語法,path標(biāo)簽里的pathData包含了畫圖的路徑(坐標(biāo))和語法
在實際使用過程中有幾率遇到這樣兩個問題(筆者都遇到過):
其實以上兩個問題都要求你掌握進(jìn)階知識,svg畫圖語法。
官方svg語法解析:
不喜歡看英文,去這篇博客:
對于Android程序員,Lottie的動畫使用很簡單,步驟如下:
1.接入Lottie
從動畫實現(xiàn)上來說,Lottie動畫應(yīng)該是最簡單的方法了。
Lottie的優(yōu)點很明顯:
Lottie的缺點:
好了,如果覺得本文對你有幫助,請關(guān)注、留言、點贊我,謝謝!