Android 簡(jiǎn)單實(shí)現(xiàn) 虛線View

在Android上使用虛線總會(huì)有各種麻煩事情。這里貼一個(gè)簡(jiǎn)單的自定義View實(shí)現(xiàn)虛線的代碼厅篓。

目前寫好的可自定義內(nèi)容:

  • 線寬
  • 線的顏色
  • 每節(jié)虛線的寬度
  • 每節(jié)虛線的間隔
  • 方向
  • 有其他需求的小伙伴自行添加吧,代碼挺簡(jiǎn)單的剧董。

java代碼:

/**
 * Created by CZH on 2017/6/12.
 * 虛線
 */
public class ImaginaryLine extends View {

    private Paint linePaint;
    private int orientation;
    private Path path;

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

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

    private void init(AttributeSet attrs) {
        TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ImaginaryLine);
        int lineColor = typedArray.getColor(R.styleable.ImaginaryLine_lineColor, Color.parseColor("#CACACA"));
        float lineWidth = typedArray.getDimension(R.styleable.ImaginaryLine_lineWidth, 10);
        float imaginaryWidth = typedArray.getDimension(R.styleable.ImaginaryLine_imaginary_width, 5);
        float intervalWidth = typedArray.getDimension(R.styleable.ImaginaryLine_interval_width, 5);
        orientation = typedArray.getInteger(R.styleable.ImaginaryLine_lineOrientation, 2);
        typedArray.recycle();
        linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        linePaint.setColor(lineColor);
        linePaint.setStyle(Paint.Style.STROKE);
        linePaint.setStrokeWidth(lineWidth);
        PathEffect effects = new DashPathEffect(new float[]{imaginaryWidth, intervalWidth}, 0.0f);//設(shè)置虛線的間隔和點(diǎn)的長(zhǎng)度
        linePaint.setPathEffect(effects);
    }

    @Override
    public void layout(@Px int l, @Px int t, @Px int r, @Px int b) {
        super.layout(l, t, r, b);
        if (path != null)
            path.reset();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (path == null) {
            path = new Path();
        }
        if (path.isEmpty()) {
            if (orientation == 1) {
                path.moveTo(getMeasuredWidth() / 2, 0);
                path.lineTo(getMeasuredWidth() / 2, getMeasuredHeight());
            } else {
                path.moveTo(0, getMeasuredHeight() / 2);
                path.lineTo(getMeasuredWidth(), getMeasuredHeight() / 2);
            }
        }

        canvas.drawPath(path, linePaint);
    }

    public void setLineColor(int color) {
        linePaint.setColor(color);
        invalidate();
    }

}

attrs:

 <!--虛線-->
  <declare-styleable name="ImaginaryLine">
     <!--方向-->
    <attr name="lineOrientation">
      <enum name="vertical" value="1" />
      <enum name="horizontal" value="2" />
    </attr>
    <!--顏色-->
    <attr name="lineColor" format="color" />
    <!--線寬-->
    <attr name="lineWidth" format="dimension" />
     <!--每節(jié)虛線的寬-->
    <attr name="imaginary_width" format="dimension"/>
    <!--每節(jié)虛線的間隔-->
    <attr name="interval_width" format="dimension"/>
  </declare-styleable>

OK 到此結(jié)束赶熟。代碼很簡(jiǎn)單,就沒寫注釋~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末米同,一起剝皮案震驚了整個(gè)濱河市骇扇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌面粮,老刑警劉巖少孝,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異熬苍,居然都是意外死亡稍走,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門柴底,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婿脸,“玉大人,你說我怎么就攤上這事似枕「堑” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵凿歼,是天一觀的道長(zhǎng)褪迟。 經(jīng)常有香客問我冗恨,道長(zhǎng),這世上最難降的妖魔是什么味赃? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任掀抹,我火速辦了婚禮,結(jié)果婚禮上心俗,老公的妹妹穿的比我還像新娘傲武。我一直安慰自己,他們只是感情好城榛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布揪利。 她就那樣靜靜地躺著,像睡著了一般狠持。 火紅的嫁衣襯著肌膚如雪疟位。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天喘垂,我揣著相機(jī)與錄音甜刻,去河邊找鬼。 笑死正勒,一個(gè)胖子當(dāng)著我的面吹牛得院,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播章贞,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祥绞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了阱驾?” 一聲冷哼從身側(cè)響起就谜,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎里覆,沒想到半個(gè)月后丧荐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喧枷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年虹统,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隧甚。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡车荔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戚扳,到底是詐尸還是另有隱情忧便,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布帽借,位于F島的核電站珠增,受9級(jí)特大地震影響超歌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒂教,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一巍举、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凝垛,春花似錦懊悯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至届氢,卻和暖如春欠窒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背退子。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留型将,地道東北人寂祥。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像七兜,于是被迫代替她去往敵國(guó)和親丸凭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腕铸,服務(wù)發(fā)現(xiàn)惜犀,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 3,866評(píng)論 1 22
  • 桃花 一笑 墻外桃花宜銷愁狠裹, 何尋煩惱滿腹餿虽界。 世間寂寥平常事, 一支獨(dú)放享自由涛菠。
    看云閣閱讀 317評(píng)論 0 1
  • 到健身房運(yùn)動(dòng)時(shí)俗冻,你有發(fā)現(xiàn)別人什么壞習(xí)慣嗎礁叔?在Huffpost Healthy Living網(wǎng)站上分享了10個(gè)破壞你...
    林爍nathan閱讀 354評(píng)論 0 1