当前位置:   article > 正文

用XML文件对控件的设置-shape形状的使用与自定义图形_xml如何调节布局圆角

xml如何调节布局圆角
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <!-- 内边距 将该背景图片的边框与图片形成10dp的边框-->
  4. <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
  5. <!-- 填充 将边框内的颜色都填充为红色-->
  6. <solid android:color="#ff0000"/>
  7. <!-- 描边 背景的边框的颜色 下面设置的为黄色 且 边框为5dp-->
  8. <stroke android:width="5dp" android:color="#ffff00"/>
  9. <!-- 圆角 设置边框的四个角为圆形,下面将圆角的半径设置为15dp 左上右下可以单独设置弧度-->
  10. <corners android:radius="15dp" />
  11. <!-- 渐变 将边框内的颜色从左王右渐变 下面三个分别表示为开始、中间、结束的颜色 起始位置的设置见下面 可以通过angle属性来控制渐变的方向 默认从左到右 -90为从上到下-->
  12. <gradient android:startColor="#ff0000" android:centerColor="#00ff00" android:endColor="#0000ff" />
  13. <!-- 注意:渐变与填充都是对边框内的颜色的设置,所以哪个属性后设置就以哪个为准(因为会覆盖前者) -->
  14. </shape>

属性说明: 

android:shape="rectangle" 自定义图片的形状
rectangle长方形    oval 椭圆形     ring环形    line 线性   
        
// 定义图片的大小  android:width宽   android:height高
<size android:width="100dp"  android:height="50dp"/>
        
//定义图片的背景色  
<solid android:color="#ff0000"/> 
    
//定义圆角的幅度      android:radius 表示幅度对应的半径
<corners android:radius="20dp"/> 
     
//指定内容与该图片的内边剧
<padding android:left="10dp" android:top="20dp"/>
        
//表示渐变色  android:angle="90" 表示渐变色的起始方向  (默认从左至右),值必须是45整数倍数, android:startColor起始颜色值  android:endColor结束颜色值
<gradient android:angle="90"  android:startColor="#ff0000" android:centerColor="#0000ff"  android:endColor="#ff0000"/>
    
//表示边框线  android:width边框线的宽度  android:color="#0000ff" 边框线的颜色
<stroke android:width="2dp" android:color="#0000ff"/>

显示虚线与虚线框

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="line" >
  4. <!--显示一条虚线,破折线的宽度为dashWith,破折线之间的空隙的宽度为dashGap,当dashGap=0dp时,为实线 -->
  5. <stroke
  6. android:dashGap="3dp"
  7. android:dashWidth="6dp"
  8. android:width="1dp"
  9. android:color="#63a219" />
  10. </shape>

 使用:

  1. <!-- 虚线1
  2. android:layerType="software" 这样才能显示出来-->
  3. <View
  4. android:layout_width="fill_parent"
  5. android:layout_height="20dp"
  6. android:background="@drawable/dotted_line"
  7. android:layerType="software"
  8. android:layout_marginLeft="10dp"
  9. android:layout_marginRight="10dp"/>

虚线框:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <!-- 填充颜色 -->
  5. <solid android:color="#FFFFFF"></solid>
  6. <!-- 线的宽度,颜色灰色
  7. width:折现的高度
  8. 折线的宽度为dashWith,折线之间的空隙的宽度为dashGap,当dashGap=0dp时,为实线 -->
  9. <stroke android:width="1dp" android:color="#63a219" android:dashGap="3dp" android:dashWidth="6dp"></stroke>
  10. <!-- 矩形的圆角半径 -->
  11. <corners android:radius="10dp" />
  12. </shape>

使用:

  1. <!-- 虚线圆角框 -->
  2. <LinearLayout
  3. android:layout_width="fill_parent"
  4. android:layout_height="45dp"
  5. android:background="@drawable/rect_gray_2"
  6. android:gravity="center"
  7. android:layout_marginTop="50dp"
  8. android:layout_marginLeft="10dp"
  9. android:layout_marginRight="10dp">
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:textSize="17sp"
  14. android:textColor="#333"
  15. android:text="虚线圆角框"/>
  16. </LinearLayout>

效果:

 

自定义图形

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="rectangle">
  4. <!-- 定义图形的形状 为长方形-->
  5. <!-- 定义图形的长宽 -->
  6. <size android:width="100dp" android:height="50dp"/>
  7. <!-- 填充颜色 -->
  8. <solid android:color="#ff0000"/>
  9. <!-- 圆角 -->
  10. <corners android:radius="20dp"/>
  11. </shape>

画圆形,作为消息条数的背景图片:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shape="oval" //代表圆形
  4. android:useLevel="false" >
  5. <stroke android:width="1dp" android:color="#ff0000"/>
  6. <!-- 填充内部颜色 -->
  7. <solid android:color="#ff0000"/>
  8. <size android:width="20dp" android:height="20dp"/> //控制这个宽度比高度长就能显示椭圆了
  9. </shape>

使用设置padding 和 background引用就行了  效果如下:

自定义View实现的竖向虚线与横向虚线:

  1. /**
  2. * 虚线
  3. */
  4. public class DashView extends View {
  5. private static final String TAG = "DashView";
  6. public static final int DEFAULT_DASH_WIDTH = 100;
  7. public static final int DEFAULT_LINE_WIDTH = 100;
  8. public static final int DEFAULT_LINE_HEIGHT = 10;
  9. public static final int DEFAULT_LINE_COLOR = 0x9E9E9E;
  10. /**虚线的方向*/
  11. public static final int ORIENTATION_HORIZONTAL = 0;
  12. public static final int ORIENTATION_VERTICAL = 1;
  13. /**默认为水平方向*/
  14. public static final int DEFAULT_DASH_ORIENTATION = ORIENTATION_HORIZONTAL;
  15. /**间距宽度*/
  16. private float dashWidth;
  17. /**线段高度*/
  18. private float lineHeight;
  19. /**线段宽度*/
  20. private float lineWidth;
  21. /**线段颜色*/
  22. private int lineColor;
  23. private int dashOrientation;
  24. private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  25. private int widthSize;
  26. private int heightSize;
  27. public DashView(Context context) {
  28. this(context,null);
  29. }
  30. public DashView(Context context, AttributeSet attrs) {
  31. super(context, attrs);
  32. TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DashView);
  33. dashWidth = typedArray.getDimension(R.styleable.DashView_dashWidth,DEFAULT_DASH_WIDTH);
  34. lineHeight = typedArray.getDimension(R.styleable.DashView_lineHeight, DEFAULT_LINE_HEIGHT);
  35. lineWidth = typedArray.getDimension(R.styleable.DashView_lineWidth, DEFAULT_LINE_WIDTH);
  36. lineColor = typedArray.getColor(R.styleable.DashView_lineColor, DEFAULT_LINE_COLOR);
  37. dashOrientation = typedArray.getInteger(R.styleable.DashView_dashOrientation,DEFAULT_DASH_ORIENTATION);
  38. mPaint.setColor(lineColor);
  39. mPaint.setStrokeWidth(lineHeight);
  40. typedArray.recycle();
  41. }
  42. @Override
  43. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  44. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  45. widthSize = MeasureSpec.getSize(widthMeasureSpec)-getPaddingLeft()-getPaddingRight();
  46. heightSize = MeasureSpec.getSize(heightMeasureSpec - getPaddingTop() - getPaddingBottom());
  47. if(dashOrientation == ORIENTATION_HORIZONTAL){
  48. 不管在布局文件中虚线高度设置为多少,控件的高度统一设置为线段的高度
  49. setMeasuredDimension(widthSize, (int) lineHeight);
  50. }else{
  51. //当为竖直方向时,控件宽度设置为虚线的高度
  52. setMeasuredDimension((int) lineHeight, heightSize);
  53. }
  54. }
  55. @Override
  56. protected void onDraw(Canvas canvas) {
  57. super.onDraw(canvas);
  58. switch (dashOrientation){
  59. case ORIENTATION_VERTICAL:
  60. drawVerticalLine(canvas);
  61. break;
  62. default:
  63. drawHorizontalLine(canvas);
  64. }
  65. }
  66. /**
  67. * 画水平方向虚线
  68. * @param canvas
  69. */
  70. public void drawHorizontalLine(Canvas canvas){
  71. float totalWidth = 0;
  72. canvas.save();
  73. float[] pts = {0,0,lineWidth,0};
  74. //在画线之前需要先把画布向下平移办个线段高度的位置,目的就是为了防止线段只画出一半的高度
  75. //因为画线段的起点位置在线段左下角
  76. canvas.translate(0,lineHeight/2);
  77. while(totalWidth<=widthSize){
  78. canvas.drawLines(pts,mPaint);
  79. canvas.translate(lineWidth + dashWidth,0);
  80. totalWidth += lineWidth + dashWidth;
  81. }
  82. canvas.restore();
  83. }
  84. /**
  85. * 画竖直方向虚线
  86. * @param canvas
  87. */
  88. public void drawVerticalLine(Canvas canvas){
  89. float totalWidth = 0;
  90. canvas.save();
  91. float[] pts = {0,0,0,lineWidth};
  92. //在画线之前需要先把画布向右平移半个线段高度的位置,目的就是为了防止线段只画出一半的高度
  93. //因为画线段的起点位置在线段左下角
  94. canvas.translate(lineHeight/2,0);
  95. while(totalWidth<=heightSize){
  96. canvas.drawLines(pts,mPaint);
  97. canvas.translate(0,lineWidth + dashWidth);
  98. totalWidth += lineWidth + dashWidth;
  99. }
  100. canvas.restore();
  101. }
  102. }
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <!--虚线
  4. dashWidth:两段线段之间的间距
  5. lineWidth:每条线段宽度
  6. lineColor:线段颜色
  7. dashOrientation:虚线方向 0,水平,1,竖直
  8. lineHeight:线段高度-->
  9. <declare-styleable name="DashView">
  10. <attr name="dashWidth" format="dimension"/>
  11. <attr name="lineWidth" format="dimension"/>
  12. <attr name="lineHeight" format="dimension"/>
  13. <attr name="lineColor" format="color"/>
  14. <attr name="dashOrientation" format="integer"/>
  15. </declare-styleable>
  16. </resources>
  1. <DashView
  2. android:layout_width="wrap_content"
  3. android:layout_height="match_parent"
  4. android:layout_marginLeft="20dp"
  5. android:layout_marginRight="20dp"
  6. app:dashWidth="5dp"
  7. app:lineWidth="8dp"
  8. app:lineColor="@color/divider_bfbfbf"
  9. app:dashOrientation="1"
  10. app:lineHeight="1dp"/>

 

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context="com.ts.work.MainActivity" >
  7. <!-- 只有图片 三者对比 -->
  8. <ImageView
  9. android:layout_width="150dp"
  10. android:layout_height="150dp"
  11. android:src="@drawable/a"/>
  12. <!-- 只有背景 -->
  13. <ImageView
  14. android:layout_marginTop="5dp"
  15. android:layout_width="150dp"
  16. android:layout_height="150dp"
  17. android:background="@drawable/shape"/>
  18. <!-- 给图片添加了一个背景 形状 -->
  19. <ImageView
  20. android:layout_marginTop="5dp"
  21. android:layout_width="150dp"
  22. android:layout_height="150dp"
  23. android:background="@drawable/shape"
  24. android:src="@drawable/a"/>
  25. </LinearLayout>

效果图:

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/420742
推荐阅读
相关标签