Android自定義View實(shí)現(xiàn)shape圖形繪制
概述
之前曾寫過一篇文章介紹了Android中drawable使用Shape資源,通過定義drawable中的shape資源能夠繪制簡(jiǎn)單的圖形效果,如矩形,橢圓形,線形和圓環(huán)等。后來我在項(xiàng)目中正好遇到這樣一個(gè)需求,要在特定的位置上顯示一條垂直的虛線。正當(dāng)我胸有成竹的把上面的資源文件放入進(jìn)去的時(shí)候,我才發(fā)現(xiàn)它并不能符合我的要求。使用shape畫出的垂直虛線,其實(shí)就是將一條水平的線,旋轉(zhuǎn)90度。但這樣做的弊端就是,該View有效區(qū)域?yàn)樾D(zhuǎn)90度后與原來位置相重合的區(qū)域,還不能隨意的改動(dòng),這樣的效果根本沒法使用。于是我就想到使用自定義view來繪制我想要的結(jié)果。
1.畫一條水平虛線
代碼如下所示:
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; public class CustView extends View{ private Paint mPaint; //定義畫筆 public CustView(Context context, AttributeSet attrs) { super(context, attrs); //初始化畫筆 initPaint(); setLayerType(View.LAYER_TYPE_SOFTWARE, mPaint); //4.0以上關(guān)閉硬件加速,否則虛線不顯示 } private void initPaint() { mPaint = new Paint(); mPaint.setAntiAlias(true); //設(shè)置抗鋸齒的效果 mPaint.setStyle(Paint.Style.STROKE); //設(shè)置畫筆樣式為描邊 mPaint.setStrokeWidth(3); //設(shè)置筆刷的粗細(xì)度 mPaint.setColor(Color.RED); //設(shè)置畫筆的顏色 mPaint.setPathEffect(new DashPathEffect(new float[]{5,5,5,5}, 1)); //設(shè)置畫筆的路徑效果為虛線效果 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawLine(0, 0, 100, 0, mPaint); } }
布局文件中引用如下:
<com.test.CustView android:layout_width="100dp" android:layout_height="10dp" android:layout_marginTop="10dp" />
說明:在自定義View的代碼中,onDraw方法中執(zhí)行的drawLine方法,全名如下:
public void drawLine (float startX, float startY, float stopX, float stopY, Paint paint)
startX:起始端點(diǎn)x坐標(biāo)
startY:起始端點(diǎn)y坐標(biāo)
stopX:終止端點(diǎn)x坐標(biāo)
stopY:終止端點(diǎn)y坐標(biāo)
上面四個(gè)左邊的值均以相對(duì)位置計(jì)算,即與左邊控件的相對(duì)位置,如果左邊沒有控件則手機(jī)屏幕左邊框的相對(duì)位置計(jì)算。
canvas.drawLine(0, 0, 100, 0, mPaint);表示的是相對(duì)左邊為x,y坐標(biāo)為0的位置開始,向右畫出100px的虛線。
去掉Button按鈕后,相對(duì)位置開始以屏幕左邊框計(jì)算,如圖所示:
還有一點(diǎn)需要注意的是,stopX和stopY的值,不能超過該控件在xml中l(wèi)ayout_width和layout_height的值,否則將會(huì)以值最小的為基準(zhǔn),超出的長(zhǎng)度無效。
2.畫一條垂直虛線
與上面代碼一致,只需要修改至下面一處:
canvas.drawLine(0, 0, 0, 100, mPaint);
3.畫一個(gè)實(shí)心圓
1).首先設(shè)置畫筆樣式為實(shí)心
mPaint.setStyle(Paint.Style.FILL); //設(shè)置畫筆樣式為填充
2).在畫布中畫圓
canvas.drawCircle(50, 50, 50, mPaint);
同樣X和Y的值,不能超過該控件在xml中l(wèi)ayout_width和layout_height的值。
4.畫一個(gè)圓環(huán)
同樣只需稍微修改一下代碼:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(50, 50, 50, mPaint); //畫一個(gè)外圓 mPaint.setColor(Color.WHITE); //重新設(shè)置畫筆顏色 canvas.drawCircle(50, 50, 30, mPaint); //畫一個(gè)內(nèi)圓 }
5.畫一個(gè)矩形
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); RectF rect = new RectF(0, 0, 80, 60); canvas.drawRect(rect, mPaint); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android開發(fā) OpenGL ES繪制3D 圖形實(shí)例詳解
- Android開發(fā)之OpenGL繪制2D圖形的方法分析
- Android openGl 繪制簡(jiǎn)單圖形的實(shí)現(xiàn)示例
- Android編程開發(fā)之在Canvas中利用Path繪制基本圖形(圓形,矩形,橢圓,三角形等)
- Android編程之canvas繪制各種圖形(點(diǎn),直線,弧,圓,橢圓,文字,矩形,多邊形,曲線,圓角矩形)
- Android開發(fā)實(shí)現(xiàn)各種圖形繪制功能示例
- Android自定義控件繪制基本圖形基礎(chǔ)入門
- android繪制幾何圖形的實(shí)例代碼
- Android shape 繪制圖形的實(shí)例詳解
- Android中常見的圖形繪制方式總結(jié)
相關(guān)文章
淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案
涉及到了ViewPager,MapView,ListView,就需要ScrollView來做一下支援,這篇文章主要介紹了淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案,有需要的可以來了解一下。2016-12-12Android使用gallery和imageSwitch制作可左右循環(huán)滑動(dòng)的圖片瀏覽器
本文主要介紹了android使用gallery和imageSwitch制作可左右循環(huán)滑動(dòng)的圖片瀏覽器的示例代碼。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04Android在listview添加checkbox實(shí)現(xiàn)原理與代碼
Android在listview添加checkbox如何實(shí)現(xiàn)一直都是新手朋友們的頭疼問題,接下來為您詳細(xì)介紹實(shí)現(xiàn)方法,感興趣的朋友可以了解下2013-01-01Android解析服務(wù)器端發(fā)來的xml數(shù)據(jù)示例
Android跟服務(wù)器交互數(shù)據(jù),有時(shí)數(shù)據(jù)量大時(shí),就需要以xml形式的交互數(shù)據(jù),下面與大家分享下使用XmlPullParser來解析xml數(shù)據(jù),感興趣的朋友可以參考下哈2013-06-06Android實(shí)現(xiàn)標(biāo)題顯示隱藏功能
這篇文章主要介紹了Android實(shí)現(xiàn)標(biāo)題顯示隱藏功能2016-02-02Android中的webview監(jiān)聽每次URL變化實(shí)例
這篇文章主要介紹了Android中的webview監(jiān)聽每次URL變化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android UI動(dòng)態(tài)設(shè)置帶有Stroke漸變色背景Drawable
這篇文章主要為大家介紹了Android UI動(dòng)態(tài)設(shè)置帶有Stroke漸變色背景Drawable,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Android實(shí)現(xiàn)3D標(biāo)簽云效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)3D標(biāo)簽云效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android中AlarmManager+Notification實(shí)現(xiàn)定時(shí)通知提醒功能
本篇文章主要介紹了Android中AlarmManager+Notification實(shí)現(xiàn)定時(shí)通知提醒功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10