Android中shape通常用法

前言

線條的設置在APP中用的地方是很多的,比如很多小模塊之間的分割,而這些絕大多數用shape都是可以實現的,但是在實際的使用中也會有小坑,比如如果是虛線呢 ?如果那條虛線要是垂直的呢?所以這裡簡單的實現以下讓我們來趟一趟這渾水。

shape實線

如果要實現肯定會有人說這個簡單用view也可以啊我把它的height設置成1dp在給個背景顏色不就可以了嗎,說的確實很有道理我也這樣做過要是用shape呢?

shape其實就是在drawable下面新建xml文件並且可以實現一些形狀的圖形

,或者是顏色減半的效果,它相比PNG圖片佔用的空間更小也比 自定義View實現的更簡單。

可以看見註解也比較詳細有幾個屬性重點說一下:

shape 這個屬性來設置你要設置的邊框形狀:rectangle 矩形(默認)line:線條ring: 環形oval:橢圓
corners標籤:gradient標籤 padding標籤

shape虛線:

如果是用shape來實現虛線的話也比較簡單:

但是有幾個地方我們得搞清楚像:width其實表示的是虛線的寬度 dashGap 表示的是線段與線段之間的間隔 而dashwidth表示的是線段之間的寬度,當然重中之重就是 android:layerType=”software”一定要在你使用虛線的地方加上。

豎直的虛線

如果誰前兩個用shape很好設置的話這個如果是shape就會有問題了由於寬和高的不確定性導致你 用shape來設置的時候就會對它邊上的佈局有影響這裡就必須得自定義View來實現了:

public class JDottedLine extends View { private Paint mDotPaint; public JDottedLine(Context context) { super(context); initView(); } public JDottedLine(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(); } public JDottedLine(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(); } private void initView() { mDotPaint = new Paint(); mDotPaint.setColor(Color.parseColor("#FF6677")); //畫筆顏色 mDotPaint.setStrokeWidth(2); //畫筆寬度 // 1、STROKE 描邊 // 2、FILL_AND_STROKE 填充內部和描邊 // 3、FILL:填充內部 mDotPaint.setStyle(Paint.Style.STROKE); //1、Cap.BUTT 這條路徑結束,而不是超越它。 //2、Cap.ROUND 結束是個半圓 //3、Cap.SQUARE 結束是個方形 mDotPaint.setStrokeCap(Paint.Cap.ROUND);// //設置抗鋸齒 mDotPaint.setAntiAlias(true); //設置是否抖動 mDotPaint.setDither(true); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); float startY = getHeight(); float startX = getWidth() / 2; DashPathEffect dashPathEffect = new DashPathEffect(new float[]{8, 10, 8, 10}, 0); mDotPaint.setPathEffect(dashPathEffect); Path path = new Path(); path.moveTo(startX,0); path.lineTo(startX,startY); canvas.drawPath(path,mDotPaint); } }

到這 基本上我們想要的幾種效果就實現了我們只需要加一下background