RoundVIew的全部代碼

RoundView.java代碼:


/**
 * Created by lijiayi on 2017/3/5.
 */


public class RoundView extends View {
    // 圓形的顏色
    private int mColor;
    //視圖的默認大小
    private final static int DEFAULT_SIZE = 200;
    //畫圓形的畫筆
    private Paint mPaint;

    public RoundView(Context context) {
        super(context);
        initPaint();
    }

    public RoundView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public RoundView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //他們兩個是相同的
        //TypedArray array=context.getTheme().obtainStyledAttributes(attrs,R.styleable.RecyclerView,defStyleAttr,0);
        //獲取RoundView中的所有自定義屬性
        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.RoundView);
        //獲取顏色的屬性
        mColor = array.getColor(R.styleable.RoundView_round_color, Color.BLACK);
        //初始化畫筆
        initPaint();
        //釋放TypedArray
        array.recycle();
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        //獲取測量之后的寬度
        int width = measureDimension(widthMeasureSpec);
        //獲取測量之后的高度
        int height = measureDimension(heightMeasureSpec);
        //設置測量之后的大小
        setMeasuredDimension(width, height);

    }

    /**
     * 獲取計算之后的值
     *
     * @param measureSpec
     * @return
     */
    private int measureDimension(int measureSpec) {
        //獲取測量方式
        int specMode = MeasureSpec.getMode(measureSpec);
        //獲取測量大小
        int specSize = MeasureSpec.getSize(measureSpec);
        //設置默認大小
        int result = DEFAULT_SIZE;
        //如果是wrap_content就選取最小的值作為最后測量的大小
        if (specMode == MeasureSpec.AT_MOST) {
            result = Math.min(DEFAULT_SIZE, specSize);
            //如果是match_parent或者是固定大小就返回測量的大小
        } else if (specMode == MeasureSpec.EXACTLY) {
            result = specSize;
        }
        return result;
    }
    //初始化畫筆
    private void initPaint() {
        mPaint = new Paint();
        //設置畫筆的顏色 默認為黑色
        mPaint.setColor(mColor);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //獲取布局的padding大小
        int paddingLeft = getPaddingLeft();
        int paddingRight = getPaddingRight();
        int paddingTop = getPaddingTop();
        int paddingBottom = getPaddingBottom();
        //通過獲取布局的寬高和padding大小計算實際的寬高
        int width = getWidth() - paddingLeft - paddingRight;
        int height = getHeight() - paddingTop - paddingBottom;
        //計算圓的半徑
        int radius = Math.min(width, height) / 2;
        //以圓形的原點坐標匿刮,畫出圓形
        canvas.drawCircle(paddingLeft + radius, paddingTop + radius, radius, mPaint);

    }

}

attrs_round_view.xml代碼:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="RoundView">
        <attr name="round_color" format="color" />
    </declare-styleable>
</resources>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末绍移,一起剝皮案震驚了整個濱河市暑劝,隨后出現(xiàn)的幾起案子秩彤,更是在濱河造成了極大的恐慌,老刑警劉巖恭陡,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡馏鹤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門娇哆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來湃累,“玉大人,你說我怎么就攤上這事碍讨≈瘟Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵勃黍,是天一觀的道長宵统。 經常有香客問我,道長覆获,這世上最難降的妖魔是什么马澈? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮弄息,結果婚禮上痊班,老公的妹妹穿的比我還像新娘。我一直安慰自己摹量,他們只是感情好涤伐,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荆永,像睡著了一般废亭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具钥,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天豆村,我揣著相機與錄音,去河邊找鬼骂删。 笑死掌动,一個胖子當著我的面吹牛,可吹牛的內容都是我干的宁玫。 我是一名探鬼主播粗恢,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼欧瘪!你這毒婦竟也來了眷射?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎妖碉,沒想到半個月后涌庭,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡欧宜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年坐榆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冗茸。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡席镀,死狀恐怖,靈堂內的尸體忽然破棺而出夏漱,到底是詐尸還是另有隱情豪诲,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布麻蹋,位于F島的核電站跛溉,受9級特大地震影響,放射性物質發(fā)生泄漏扮授。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一专肪、第九天 我趴在偏房一處隱蔽的房頂上張望刹勃。 院中可真熱鬧,春花似錦嚎尤、人聲如沸荔仁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乏梁。三九已至,卻和暖如春关贵,著一層夾襖步出監(jiān)牢的瞬間遇骑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工揖曾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留落萎,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓炭剪,卻偏偏與公主長得像练链,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子奴拦,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法媒鼓,類相關的語法,內部類的語法,繼承相關的語法绿鸣,異常的語法疚沐,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評論 25 707
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,810評論 0 11
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 3,880評論 2 8
  • 春節(jié)回家過年期間濒旦,難免聽到各種各樣的家長里短,聽的真是不厭其煩再登,但多少又有些無可奈何尔邓。不知道從什么時候,慢慢開始有...
    程序新視界閱讀 789評論 0 1