Android Paint 使用詳解
自定義控制元件具有很強的靈活性,可以根據你的想法畫出各種各樣的圖案,在Android中如果是自定義控制元件的話,Paint這個類用的還是較多的,這一篇就來簡單介紹Paint這個類的使用,先來看一下這個類的註釋
/** * The Paint class holds the style and color information about how to draw * geometries, text and bitmaps. */
這個類可以畫幾何圖形,文字和bitmap。由於這個類的native方法和@hide方法比較多,這裡就挑一些在工作中可能常用到的方法來講解。先來看一下Paint的style,共有3種
Paint.Style.FILL:填充內部
Paint.Style.FILL_AND_STROKE :填充內部和描邊
Paint.Style.STROKE :描邊
我們看一下效果
FILL_AND_STROKE和FILL區別不是很大。在看一下Cap,也有3種型別,主要是線條的末端,為了直觀,下面三個線條我設定的比較粗,我們看一下效果
我們看一下,其中兩條豎線是三條線條的座標的起始點和終止點,區別很明顯。再來看看Join,也是有3種型別,我們看一下
這個是畫的矩形,連線的時候用到的,效果很明顯,就不在解釋。再看下一個Align,也是有3種型別,看名字大概也能猜的出來,不過還是要來驗證一下
OK,Paint的幾種型別已經演示完了,下面主要來看一下他的方法。
//重置Paint。
reset()
//設定一些標誌,比如抗鋸齒,下劃線等等。
setFlags(int flags)
//設定抗鋸齒,如果不設定,載入點陣圖的時候可能會出現鋸齒狀的邊界,如果設定,邊界就會變的稍微有點模糊,鋸齒就看不到了。
setAntiAlias(boolean aa)
//設定是否抖動,如果不設定感覺就會有一些僵硬的線條,如果設定影像就會看的更柔和一些,
setDither(boolean dither)
//這個是文字快取,設定線性文字,如果設定為true就不需要快取,
setLinearText(boolean linearText)
//設定亞畫素,是對文字的一種優化設定,可以讓文字看起來更加清晰明顯,可以參考一下PC端的控制皮膚-外觀和個性化-調整ClearType文字
setSubpixelText(boolean subpixelText)
//設定文字的下劃線
setUnderlineText(boolean underlineText)
//設定文字的刪除線
setStrikeThruText(boolean strikeThruText)
//設定文字粗體
setFakeBoldText(boolean fakeBoldText)
//對點陣圖進行濾波處理,如果該項設定為true,則影像在動畫進行中會濾掉對Bitmap影像的優化操作,加快顯示
setFilterBitmap(boolean filter)
//下面這幾個就不用說了,上面已經演示過
setStyle(Style style),setStrokeCap(Cap cap),setStrokeJoin(Join join),setTextAlign(Align align),
//設定畫筆顏色
setColor(int color)
//設定畫筆的透明度[0-255],0是完全透明,255是完全不透明
setAlpha(int a)
//設定畫筆顏色,argb形式alpha,red,green,blue每個範圍都是[0-255],
setARGB(int a, int r, int g, int b)
//畫筆樣式為空心時,設定空心畫筆的寬度
setStrokeWidth(float width)
//當style為Stroke或StrokeAndFill時設定連線處的傾斜度,這個值必須大於0,看一下演示結果
setStrokeMiter(float miter)
左上角的沒有設定setStrokeMiter,右上角setStrokeMiter(2.3f),左下角setStrokeMiter(1.7f),右下角setStrokeMiter(0f)
//這個沒整明白具體幹什麼用的
getFillPath(Path src, Path dst)
//設定著色器,用來給影像著色的,繪製出各種漸變效果,有BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient幾種,這個以後再單獨講
setShader(Shader shader)
//設定畫筆顏色過濾器,有ColorMatrixColorFilter,LightingColorFilter,PorterDuffColorFilter幾種,這個以後再單獨分析
setColorFilter(ColorFilter filter)
//設定圖形重疊時的顯示方式,下面來演示一下
setXfermode(Xfermode xfermode)
下面是我執行目錄D:\Android\adt-bundle-windows\sdk\samples\android-20\legacy\ApiDemos\src\com\example\android\apis\graphics\Xfermodes類的結果
總共有16種重疊模式,而Mode類中顯示的總共有18種,下面是我自己寫的一個,只有綠色和紅色兩種圖片(沒有黑色),先畫的是綠色,後畫的是紅色,和上面有很大差距,不知道什麼原因,有時間得好好研究一下
//設定繪製路徑的效果,有ComposePathEffect,CornerPathEffect,DashPathEffect,DiscretePathEffect,PathDashPathEffect,SumPathEffect幾種,以後在單獨分析
setPathEffect(PathEffect effect)
//對影像進行一定的處理,實現濾鏡的效果,如濾化,立體等,有BlurMaskFilter,EmbossMaskFilter幾種
setMaskFilter(MaskFilter maskfilter)
//設定字型樣式,可以是Typeface設定的樣式,也可以通過Typeface的createFromAsset(AssetManager mgr, String path)方法載入樣式
setTypeface(Typeface typeface)
//設定陰影效果,radius為陰影角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色 ,看一下演示效果,其中第一個是沒有陰影的,第二個設定了黑色的陰影
setShadowLayer(float radius, float dx, float dy, int shadowColor)
//設定地理位置,比如顯示中文,日文,韓文等,預設的顯示Locale.getDefault()即可,
setTextLocale(Locale locale)
//設定優雅的文字高度,這個設定可能會對FontMetrics產生影響
setElegantTextHeight(boolean elegant)
//設定字型大小
setTextSize(float textSize)
//設定字型的水平方向的縮放因子,預設值為1,大於1時會沿X軸水平放大,小於1時會沿X軸水平縮小
setTextScaleX(float scaleX)
//設定文字在水平方向上的傾斜,預設值為0,推薦的值為-0.25,
setTextSkewX(float skewX)
//設定行的間距,預設值是0,負值行間距會收縮
setLetterSpacing(float letterSpacing)
//設定字型樣式,可以設定CSS樣式
setFontFeatureSettings(String settings)
//這個Paint的靜態內部類,主要用於字型的高度,以後再分析
FontMetrics
//下面幾個就是測量字型的長度了
measureText(char[] text, int index, int count),measureText(String text, int start, int end),measureText(String text),measureText(CharSequence text, int start, int end)
//下面這幾個就是剪下顯示,就是大於maxWidth的時候只擷取指定長度的顯示
breakText(char[] text, int index, int count,float maxWidth, float[] measuredWidth),breakText(CharSequence text, int start, int end,boolean measureForwards, floatmaxWidth, float[] measuredWidth),breakText(String text, boolean measureForwards,float maxWidth, float[] measuredWidth)
//提取指定範圍內的字串,儲存到widths中,
getTextWidths(char[] text, int index, int count,float[] widths),getTextWidths(CharSequence text, int start, int end, float[] widths),getTextWidths(String text, int start, int end, float[] widths),getTextWidths(String text, float[] widths)
//獲取文字繪製的路徑,提取到Path中,
getTextPath(char[] text, int index, int count, float x, float y, Path path),getTextPath(String text, int start, int end, float x, float y, Path path)
//得到文字的邊界,上下左右,提取到bounds中,可以通過這計算文字的寬和高
getTextBounds(String text, int start, int end, Rect bounds) ,getTextBounds(char[] text, int index, int count, Rect bounds)
OK,剩下的一些就是@hide或是native,或者是get方法,這裡就不在一一敘述。
相關文章
- Android Paint 之 PathEffect 詳解AndroidAI
- HenCoder Android 開發進階: 自定義 View 1-2 Paint 詳解AndroidViewAI
- Android的Paint、Canvas和Path基本使用總結AndroidAICanvas
- Android神筆之PaintAndroidAI
- Android Gson使用詳解Android
- Android AsyncTask使用詳解Android
- Android webview使用詳解AndroidWebView
- Android ViewPager使用詳解AndroidViewpager
- Android BroadcastReceiver使用詳解AndroidAST
- Android AIDL使用詳解AndroidAI
- 詳解Android RxJava的使用AndroidRxJava
- Android Support Annotations 使用詳解Android
- Android中PopupWindow使用詳解Android
- Android中AsyncTask使用詳解Android
- android canvas\paint\path簡單使用(自定義view必學)AndroidCanvasAIView
- Android-SharedPreferences 使用詳解Android
- Android FragmentTabHost 使用方法詳解AndroidFragment
- Android shape的使用詳解Android
- Android taskAffinity屬性使用詳解Android
- 詳解Android中AsyncTask的使用Android
- Android 中 HttpURLConnection 使用詳解AndroidHTTP
- Android中HttpURLConnection使用詳解AndroidHTTP
- Android Retrofit 2.5.0使用基礎詳解Android
- Android shape 的詳解及使用Android
- Android Bitmap快取池使用詳解Android快取
- Android HOOK工具Cydia Substrate使用詳解AndroidHook
- Android自定義View工具:Paint&Canvas(二)AndroidViewAICanvas
- Android自定義View工具:Paint&Canvas(一)AndroidViewAICanvas
- Android EventBus3.x的使用詳解AndroidS3
- Android藍芽使用詳解(普通藍芽)Android藍芽
- Android Resources 資原始檔的使用詳解Android
- Android多種進度條使用詳解Android
- Android生命週期元件Lifecycle使用詳解Android元件
- Android圖片載入框架Fresco使用詳解Android框架
- Android除錯神器stetho使用詳解和改造Android除錯
- Android ORM 框架:GreenDao 使用詳解(基礎篇)AndroidORM框架
- Android ORM 框架:GreenDao 使用詳解(進階篇)AndroidORM框架
- Android應用中Clean架構使用詳解Android架構