自定义组件初学

Paint类表示画笔,用来描述图形的颜色和风格,如线宽、颜色、透明度和填充效果等信息。
使用Paint类时,需要先创建该类的对象,这可以通过该类提供的构造方法来实现,通常情况下,只需要使用Paint()方法来创建一个使用默认设置的Paint对象。

使用Paint可以基本分为三步:
1.通过构造方法创建出一个Paint的实例出来;
2.通过各类set方法对该Paint对象进行设置;
3.通常搭配Canvas来使用Paint

Paint属性设置

/**   
     * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,  
     * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,    
     * 大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。          
     * <strong><span style="color: #800000; font-size: small;">1.图形绘制  </span></strong>  
     * setARGB(int a,int r,int g,int b);   
     * 设置绘制的颜色,a代表透明度,r,g,b代表颜色值。   
     * setAlpha(int a);   
     * 设置绘制图形的透明度。  
     * setColor(int color);    

     * 设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。    
    * setAntiAlias(boolean aa);    
     * 设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。    
     * setDither(boolean dither);    
     * 设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰    
     * setFilterBitmap(boolean filter);   
     * 如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示   
     * 速度,本设置项依赖于dither和xfermode的设置    
     * setMaskFilter(MaskFilter maskfilter);    
     * 设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等       *     
     * setColorFilter(ColorFilter colorfilter);    
     * 设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果    
     * setPathEffect(PathEffect effect);    
     * 设置绘制路径的效果,如点画线等    
     * setShader(Shader shader);    
     * 设置图像效果,使用Shader可以绘制出各种渐变效果    
     * setShadowLayer(float radius ,float dx,float dy,int color);    
     * 在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色    
     * setStyle(Paint.Style style);    
     * 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE    
     * setStrokeCap(Paint.Cap cap);    
     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式    
     * Cap.ROUND,或方形样式Cap.SQUARE    
     * setSrokeJoin(Paint.Join join);    
     * 设置绘制时各图形的结合方式,如平滑效果等    
     * setStrokeWidth(float width);    
     * 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度    
     * setXfermode(Xfermode xfermode);    
     * 设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果    
     *<span style="color: #800000; font-size: small;"><strong> 2.文本绘制  </strong></span>  
     * setFakeBoldText(boolean fakeBoldText);   
     * 模拟实现粗体文字,设置在小字体上效果会非常差    
     * setSubpixelText(boolean subpixelText);    
     * 设置该项为true,将有助于文本在LCD屏幕上的显示效果    
     * setTextAlign(Paint.Align align);  
     * 设置绘制文字的对齐方向    
   * setTextScaleX(float scaleX);     
    * 设置绘制文字x轴的缩放比例,可以实现文字的拉伸的效果    
     * setTextSize(float textSize);    
     * 设置绘制文字的字号大小    
     * setTextSkewX(float skewX);    
     * 设置斜体文字,skewX为倾斜弧度    
     * setTypeface(Typeface typeface);    
     * 设置Typeface对象,即字体风格,包括粗体,斜体以及衬线体,非衬线体等    
     * setUnderlineText(boolean underlineText);   
     * 设置带有下划线的文字效果    
     * setStrikeThruText(boolean strikeThruText);   
     * 设置带有删除线的效果    
     **/    


setXfermode
* 16条Porter-Duff规则 
 * 1.PorterDuff.Mode.CLEAR 
 * 2.PorterDuff.Mode.SRC 
 * 3.PorterDuff.Mode.DST 
 * 4.PorterDuff.Mode.SRC_OVER 
 * 5.PorterDuff.Mode.DST_OVER 
 * 6.PorterDuff.Mode.SRC_IN 
 * 7.PorterDuff.Mode.DST_IN 
 * 8.PorterDuff.Mode.SRC_OUT 
 * 9.PorterDuff.Mode.DST_OUT 
 * 10.PorterDuff.Mode.SRC_ATOP 
 * 11.PorterDuff.Mode.DST_ATOP 
 * 12.PorterDuff.Mode.XOR 
 * 13.PorterDuff.Mode.DARKEN 
 * 14.PorterDuff.Mode.LIGHTEN 
 * 15.PorterDuff.Mode.MULTIPLY 
 * 16.PorterDuff.Mode.SCREEN 
 * ![这里写图片描述](http://img.blog.csdn.net/20160711215937751)
首先,在布局中添加ImageView控件

<ImageView
    android:id="@+id/imageview"
    android:layout_width="600px"
    android:layout_height="600px" />

在main中创建画笔和矢量图bitmap

        setContentView(R.layout.activity_main);
//        创建画笔
        Paint paint = new Paint();
          paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN));
//        创建一个矢量图(宽,高,设置(满饱和度))
        Bitmap bitmap = Bitmap.createBitmap(600,600, Bitmap.Config.ARGB_8888);
//        创建一个画布
        Canvas canvas = new Canvas(bitmap);
        paint.setColor(Color.BLUE);
//        绘图的结果最后都会保留在bitmap中(圆心坐标(x,y),圆弧半径长度)
        canvas.drawCircle(100, 100, 100, paint);
//        拿到imageView视图,并设置他的图片为刚才的图片
        paint.setColor(Color.YELLOW);
//       使用画笔在画布上画一个矩形(距左,上,右边距左,下边距上)
        Rect rect = new Rect(150, 150, 400, 400);
        canvas.drawRect(rect, paint);
//        作弧形
       paint.setColor(Color.RED);
        RectF rect2= new RectF(200,200,600,600);
//        (相对的矩形,起始度数,移动度数,是否使用画笔,和画笔)
        canvas.drawArc(rect2,0,120,false,paint);
        paint.setColor(Color.BLACK);
//          线条宽度
       paint.setStrokeWidth(20);
        canvas.drawLine(100,100,500,500,paint);
//          使用paint写文字
       paint.setColor(Color.GREEN);
        paint.setTextSize(200);
        canvas.drawText("FUCK",100,300,paint);
//         bitmap放入到imageView
        ImageView imageView = (ImageView) findViewById(R.id.imageview);
        imageView.setImageBitmap(bitmap);

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值