自定義View(自定義圓形效果)

背景

前面的文章我們介紹了一些關(guān)于自定義View的基本知識(shí)和自定義View的類型廊驼,今天真正的來實(shí)現(xiàn)一個(gè)自定義View。

自定義圓形

從簡(jiǎn)單的開始,我們先實(shí)現(xiàn)一個(gè)自定義的圓形View妒挎,屬于繼承View重寫 onDraw方法的類型
public class CircleView extends View{ private int mColor = Color.GREEN; private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); public CircleView(Context context) { super(context); init(); } public CircleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CircleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } /** * 初始化畫筆的顏色 */ private void init(){ mPaint.setColor(mColor); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = getWidth(); int height = getHeight(); int radius = Math.min(width,height) / 2; canvas.drawCircle(width / 2,height / 2,radius,mPaint); } }
以上代碼就簡(jiǎn)單的實(shí)現(xiàn)了一個(gè)具有圓形效果的自定義View绳锅,它會(huì)在自己的中興點(diǎn)按照寬高的最小值為直徑繪制一個(gè)實(shí)心的園,很簡(jiǎn)單饥漫,大家應(yīng)該都會(huì)榨呆,但是在我們使用的時(shí)候我們會(huì)發(fā)現(xiàn)
<com.aotuman.circleview.view.CircleView android:padding="5dp" android:layout_margin="5dp" android:layout_width="wrap_content" android:layout_height="200dp" android:background="@android:color/black"/>

circleview.png

我們可以看到,在這樣的使用不庸队,padding和warp_content并不起作用积蜻,因?yàn)槲覀兦懊娴奈恼抡f到過,這種方式的自定義View要自己處理padding和warp_content彻消。

padding和warp_content的處理

其實(shí)對(duì)于這兩個(gè)屬性的處理也很簡(jiǎn)單竿拆,我們只要稍稍的修改一下onDraw方法就可以了,下面是見證奇跡的時(shí)刻:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //獲取padding的數(shù)值 final int paddingLeft = getPaddingLeft(); final int paddingRight = getPaddingRight(); final int paddingTop = getPaddingTop(); final int paddingBottom = getPaddingBottom(); int width = getWidth() - paddingLeft - paddingRight; int height = getHeight() - paddingTop - paddingBottom; int radius = Math.min(width,height) / 2; canvas.drawCircle(paddingLeft + width / 2,paddingRight + height / 2,radius,mPaint); }

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); int width = (int)this.getContext().getResources() .getDimension(R.dimen.cricleView_width); int height = (int)this.getContext().getResources() .getDimension(R.dimen.cricleView_height); if(widthSpecMode == MeasureSpec.AT_MOST && heightSpecMode == MeasureSpec.AT_MOST){ setMeasuredDimension(width,height); }else if(widthSpecMode == MeasureSpec.AT_MOST){ setMeasuredDimension(heightSpecSize,heightSpecSize); }else if(heightSpecMode == MeasureSpec.AT_MOST){ setMeasuredDimension(widthSpecSize,widthSpecSize); } }

circleview2.png

怎么樣效果很明顯吧宾尚。

總結(jié)

今天的非潮瘢基礎(chǔ),就是講了一個(gè)超級(jí)簡(jiǎn)單的自定義繪制煌贴,只是適合初學(xué)者御板,希望大神們不要噴,哈哈牛郑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怠肋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子淹朋,更是在濱河造成了極大的恐慌笙各,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件础芍,死亡現(xiàn)場(chǎng)離奇詭異杈抢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)仑性,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門惶楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诊杆,你說我怎么就攤上這事鲫懒。” “怎么了刽辙?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵窥岩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宰缤,道長(zhǎng)颂翼,這世上最難降的妖魔是什么晃洒? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮朦乏,結(jié)果婚禮上球及,老公的妹妹穿的比我還像新娘。我一直安慰自己呻疹,他們只是感情好吃引,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刽锤,像睡著了一般镊尺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上并思,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天庐氮,我揣著相機(jī)與錄音,去河邊找鬼宋彼。 笑死弄砍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的输涕。 我是一名探鬼主播音婶,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼莱坎!你這毒婦竟也來了衣式?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤型奥,失蹤者是張志新(化名)和其女友劉穎瞳收,沒想到半個(gè)月后碉京,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厢汹,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年谐宙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烫葬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凡蜻,死狀恐怖搭综,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情划栓,我是刑警寧澤兑巾,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站忠荞,受9級(jí)特大地震影響蒋歌,放射性物質(zhì)發(fā)生泄漏帅掘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一堂油、第九天 我趴在偏房一處隱蔽的房頂上張望修档。 院中可真熱鬧,春花似錦府框、人聲如沸吱窝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院峡。三九已至,卻和暖如春袜香,著一層夾襖步出監(jiān)牢的瞬間撕予,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工蜈首, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留实抡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓欢策,卻偏偏與公主長(zhǎng)得像吆寨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踩寇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容