自定義View基礎(chǔ)一延伸

上一篇講的自定義view說的不夠精簡,這篇說的詳細點墓贿,簡單點茧泪,大家一起學習

自定義繪制的方式是重寫繪制方法蜓氨,繪制方法不是一個,其中最常用的是 onDraw()队伟,onDraw()負責的是View的整體繪制穴吹,具體執(zhí)行繪制操作的是onDraw()里面的canvas參數(shù)

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

繪制的關(guān)鍵是 Canvas 的使用
Canvas 的繪制類方法: drawXXX() (關(guān)鍵參數(shù):Paint)
Canvas 的輔助類方法:范圍裁切和幾何變換
這里就使用canvas來畫一個圓跟一個正方形
先自定義一個TextView(隨便寫的,不要計較)嗜侮,構(gòu)造函數(shù)都要實現(xiàn)

public class MyTextView extends TextView {

    Paint paint = new Paint();

    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(450,450,50,paint);   //畫圓 其中450表示坐標位置港令,圓的x、y軸坐標位置都是圓心的位置锈颗,50表示圓的半徑
        canvas.drawRect(300,250,400,350,paint); 畫正方形
    }
}

上面用到了paint對象顷霹,paint可以設(shè)置顏色,設(shè)置線條的粗細击吱,陰影啊一系列東西淋淀。

下面再講兩個方法
Canvas.drawXXX()是針對整個畫布進行操作
Paint是對你畫出來的東西進行操作,比如剛才畫的圓覆醇,我們可以通過paint.setColor(Color.parseColor("#88880000"));來設(shè)置圓的背景色

Paint 類的幾個最常用的方法朵纷。具體是:
Paint.setStyle(Style style) 設(shè)置繪制模式
Paint.setColor(int color) 設(shè)置顏色
Paint.setStrokeWidth(float width) 設(shè)置線條寬度
Paint.setTextSize(float textSize) 設(shè)置文字大小
Paint.setAntiAlias(boolean aa) 設(shè)置抗鋸齒開關(guān)

我去。叫乌。柴罐。。憨奸。革屠。。排宰。似芝。。板甘。說自定義View我怎么把坐標系這個概念忘了說党瓮,f**k。
趕緊百度一下
View 提供了如下 5 種方法獲取 View 的坐標:

  1. View.getTop()盐类、View.getLeft()寞奸、View.getBottom()、View.getRight();
  2. View.getX()在跳、View.getY();
  3. View.getTranslationX()枪萄、View.getTranslationY();
  4. View.getLocationOnScreen(int[] position);
  5. View.getLocationInWindow(int[] position);
    1.png

    好了,圖是拷貝來的猫妙,作者的博客鏈接是https://blog.csdn.net/u013872857/article/details/53750682
    可以去學習下View的坐標系概念瓷翻,我就是懶,忘了去總結(jié)下,就不多說了這個齐帚,百度一下有很多人講的比我詳細的多妒牙,2333333333

上面說過了怎么給圓設(shè)置背景,接下來就設(shè)置一個紅色的圓吧
onDraw()方法里這樣操作就好啦

paint.setColor(Color.RED); // 設(shè)置為紅色  
canvas.drawCircle(300, 300, 200, paint);  

如果要設(shè)置一個空心圓的話对妄,上面已經(jīng)說過了湘今,通過paint對象就可以啦
把繪制模式改為畫線模式就好啦
paint.setStyle(Paint.Style.STROKE);
這里是通過paint對象的style方法對畫的內(nèi)容來設(shè)置一個style


2.png

通過代碼可以看到,style有三種饥伊,之前的代碼告訴我們這里style默認使用的是FILL這種填充模式象浑,STROKE就是蔫饰。琅豆。。啥呢篓吁,不填充模式(畫線模式)茫因,F(xiàn)ILL_AND_STROKE就是既畫線也填充
這樣問題又來了,馬丹UI喜歡設(shè)計一下杖剪,這個線要多粗多粗冻押,怎么辦?
Paint.setStrokeWidth(float width)這個方法一下子就把UI的要求解決了盛嘿,我們可以通過這個方法來設(shè)置線條的寬度
這里的單位是像素洛巢。

經(jīng)常遇到寫按鈕的時候,按鈕需要一個弧度次兆,圓角矩形稿茉。一般自己定義個shape,然后設(shè)置顏色啊什么的芥炭,遇到變態(tài)的漓库,顏色不一致還要設(shè)置多個shape。
下面就來畫一下圓角矩形
canvas.drawRoundRect(100, 100, 500, 300, 50, 50, paint);
其中园蝠,left, top, right, bottom 是四條邊的坐標渺蒿,rx、ry是圓角的弧度彪薛,就是圓角的橫向半徑和縱向半徑

畫橢圓就是canvas.drawOval(50, 50, 350, 200, paint);都是canvas的方法堆砌啦
畫線canvas.drawLine(200, 200, 800, 500, paint); 方法里的參數(shù)startX, startY, stopX, stopY 分別是線的起點和終點坐標茂装。

下面再說一下 繪制扇形和弧形圖


3.png

left, top, right, bottom 描述的是這個弧形所在的橢圓;startAngle 是弧形的起始角度(x 軸的正向善延,即正右的方向少态,是 0 度的位置;順時針為正角度挚冤,逆時針為負角度)况增,sweepAngle 是弧形劃過的角度;useCenter 表示是否連接到圓心训挡,如果不連接到圓心澳骤,就是弧形歧强,如果連接到圓心,就是扇形为肮。

這篇就說這些簡單的利用canvas畫一些簡單的圖吧~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摊册,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颊艳,更是在濱河造成了極大的恐慌茅特,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棋枕,死亡現(xiàn)場離奇詭異白修,居然都是意外死亡,警方通過查閱死者的電腦和手機重斑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門兵睛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窥浪,你說我怎么就攤上這事祖很。” “怎么了漾脂?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵假颇,是天一觀的道長。 經(jīng)常有香客問我骨稿,道長笨鸡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任啊终,我火速辦了婚禮镜豹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓝牲。我一直安慰自己趟脂,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布例衍。 她就那樣靜靜地躺著昔期,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佛玄。 梳的紋絲不亂的頭發(fā)上硼一,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音梦抢,去河邊找鬼般贼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哼蛆。 我是一名探鬼主播蕊梧,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腮介!你這毒婦竟也來了肥矢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叠洗,失蹤者是張志新(化名)和其女友劉穎甘改,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灭抑,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡十艾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了名挥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疟羹。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡主守,死狀恐怖禀倔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情参淫,我是刑警寧澤救湖,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站涎才,受9級特大地震影響鞋既,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耍铜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一邑闺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棕兼,春花似錦陡舅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至茎芋,卻和暖如春颅眶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背田弥。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工涛酗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓商叹,卻偏偏與公主長得像眷蜈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沈自,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 系列文章之 Android中自定義View(一)系列文章之 Android中自定義View(二)系列文章之 And...
    YoungerDev閱讀 4,403評論 3 11
  • HenCoder 原文 關(guān)鍵點 自定義繪制方法的重寫酌儒,其中最常用的是onDraw 繪制的關(guān)鍵是Canvas的使用C...
    李小神不偷懶閱讀 513評論 4 1
  • 記錄下自己學習自定義View的過程。共勉 首先枯途,在我們創(chuàng)建的自定義View中 重寫onDraw()方法忌怎。如下 @O...
    萬有引力丶閱讀 955評論 0 1
  • 聽朋友說,最近有個地方因中國游客的蜂擁而至變得很熱火酪夷,這個地方就是但丁故居榴啸,它在歐洲文藝復興之都,佛羅倫薩晚岭。 老照...
    安三七閱讀 565評論 0 0
  • Another character appeared in chapter nine, it was Stuart...
    青丫_閱讀 183評論 0 1