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


  
 
  
 
 
 
  
 
 
 


分享到:


相關文章: