android自定义View---生成虚线的View

1.在res/values/目录下 新建文件 attrs.xml


<?  xml   version =  "1.0"   encoding =  "utf-8"  ?>
<  resources >
 
     < declare-styleable  name  =  "dashedline" >
         < attr  name  =  "lineColor"   format =  "color"   />
     </ declare-styleable  >
 
</  resources >

 
2.创建自定义View,DashedLine.java
public  class  DashedLine  extends  View {
            private  Paint  paint  =  null ;
            private  Path  path  =  null ;
            private  PathEffect  pe  =  null ;
 
            public  DashedLine(Context paramContext) {
                     this (paramContext,  null );
          }
 
            public  DashedLine(Context paramContext, AttributeSet paramAttributeSet) {
                     super (paramContext, paramAttributeSet);
                       //通过R.styleable.dashedline获得我们在attrs.xml中定义的
//<declare- styleable  name=" dashedline ">  TypedArray
                   TypedArray a = paramContext.obtainStyledAttributes(paramAttributeSet, R.styleable.  dashedline );
                     //我们在attrs.xml中<declare- styleable  name=" dashedline ">节点下
//添加了<attr name="lineColor" format="color" />
                     //表示这个属性名为lineColor类型为color。当用户在布局文件中对它有设定值时
                     //可通过TypedArray获得它的值当用户无设置值是采用默认值0XFF00000
                     int  lineColor = a.getColor(R.styleable.  dashedline_lineColor , 0XFF000000);
                   a.recycle();
                     this .  paint  =  new  Paint();
                     this .  path  =  new  Path();
                     this .  paint .setStyle(Paint.Style.  STROKE );
                     this .  paint .setColor(lineColor);
                     this .  paint .setAntiAlias(  true );
                     this .  paint .setStrokeWidth(BitmapHelper.  dip2px (getContext(), 2.0F));
                     float [] arrayOfFloat =  new   float [4];
                   arrayOfFloat[0] = BitmapHelper.  dip2px (getContext(), 2.0F);
                   arrayOfFloat[1] = BitmapHelper.  dip2px (getContext(), 2.0F);
                   arrayOfFloat[2] = BitmapHelper.  dip2px (getContext(), 2.0F);
                   arrayOfFloat[3] = BitmapHelper.  dip2px (getContext(), 2.0F);
                     this .  pe  =  new  DashPathEffect(arrayOfFloat, BitmapHelper. dip2px (getContext(), 1.0F));
          }
 
            @Override
            protected   void  onDraw(Canvas canvas) {
                     super .onDraw(canvas);
                     this .  path .moveTo(0.0F, 0.0F);
                     this .  path .lineTo(getMeasuredWidth(), 0.0F);
                     this .  paint .setPathEffect(  this .  pe );
                   canvas.drawPath(  this .  path this .  paint );
          }
 
}
3.新建布局文件dashedline.xml

<?  xml   version =  "1.0"   encoding =  "utf-8"  ?>
<  LinearLayout   xmlns:android =  "http://schemas.android.com/apk/res/android"
     xmlns:dash =  "http://schemas.android.com/apk/res/com.example.martixtest"
     android:layout_width =  "fill_parent"
     android:layout_height =  "fill_parent"
     android:background =  "#eee"
     android:orientation =  "vertical"   >
 
     < com.example.martixtest.myview.DashedLine
         android:layout_width =  "fill_parent"
         android:layout_height =  "1dip"
         android:layout_margin =  "10dip"
         dash:lineColor =  "#ff50f8"   />
 
     < com.example.martixtest.myview.DashedLine
         android:layout_width =  "fill_parent"
         android:layout_height =  "1dip"
         android:layout_margin =  "10dip" />
 
     < com.example.martixtest.myview.DashedLine
         android:layout_width =  "fill_parent"
         android:layout_height =  "1dip"
         android:layout_margin =  "10dip"
         dash:lineColor =  "#f34f71"   />
 
</  LinearLayout >
4.最终运行效果如下:







 

posted @ 2013-07-19 19:50  坚固66  阅读(370)  评论(0编辑  收藏  举报