android 绘画,Android绘图基础

绘图三要素

一支画笔 Paint。

一张画布 Canvas。

一个 Bitmap 或者一个 View 来承载这个图形。

Paint常用属性

setAntiAlias() 设置画笔锯齿效果。

setColor() 设置画笔颜色。

setTextSize() 设置字体尺寸。

setStrokeWidth() 设置空心边框的宽度。

setStyle() 设置画笔的风格。

Canvas常用draw方法

drawPoint() 画点。

drawLine() 画线。

drawRect() 画矩形。

drawRoundRext() 画圆角矩形。

drawArc() 画弧形.扇形。

drawOval() 画椭圆。

drawPath() 画路径。

drawText() 画文本。

说明

对于drawRect(left,tob,rigth,bottom,paint)接收的四个参数,当Paint.Style为Fill的时候,是指该矩形各条边到画布坐标轴的距离(一般是画布的左顶点水平方向为X轴,垂直方向为Y轴,Y轴向下为正)。当Paint.Style为Stroke的时候,是指该矩形边框各条边的中心的到画布坐标轴的距离。

drawPath()方法绘制的是路径。比如我要绘制一个三角形,并显示在ImageView上:

Bitmap bm = Bitmap.createBitmap(1000,1000, Bitmap.Config.ARGB_8888);

canvas = new Canvas(bm);

paint = new Paint();

paint.setColor(Color.RED);

paint.setStyle(Paint.Style.STROKE); //必须设置,否则默认为Fill,会填充。

paint.setStrokeWidth(3.0f);

Path path = new Path();

path.moveTo(100,100);

path.lineTo(500,300);

path.lineTo(300,600);

path.close(); // 闭合曲线。

canvas.drawPath(path,paint);

imageView.setImageBitmap(bm);

其中moveTo(),方法是把起始点移动到指定位置。lineTo()是从起始点画一条道指定点的直线。更多关于Path的知识,请参考android绘图之Path总结。

drawArc(),drawArc(left,top,righ,bottom,startAngle,sweepAngle,useCenter,paint)是先按照给定的上下左右的距离确定一个矩形(长宽不一定要相等),然后把这个矩形的上边为旋转到startAngel角度,把矩形的左边旋转到和上边所成的夹角为sweepAngle角度,然后用弧线连接这两条边的端点。其中和X轴平行的方向为0度,正数表示顺时针旋转。当useCenter为true时,会显示左右两条边,为false时,只显示一段弧线。如绘制了一个扇形:

canvas.drawArc(100,100,300,300,30,60,true,paint);

Canvas的其他方法

Canvas.sava()

Canvas.restore()

Canvas.translate()

Canvas.rotate()

Canvas.scale()

Canvas.saveLayer()

Canvas.saveLayerAlpha()

Canvas.restoreToCount()

Canvas.clipPath()

说明

Canvas.sava()是把之前在画布上的操作保存起来,使之后的操作在另外一个图层上。Canvas.restore()则是把图层合并起来。通常我们可以先调用Canvas.sava()启用一个新的图层,然后我们可以通过Canvas.translate()或Canvas.rotate()移动或旋转这个新图层,这时的坐标都是以这个新的图层为基准,此时能大大简化我们的坐标计算。完成绘制之后,再调用Canvas.restore()就可以了。

Canvas.saveLayer()。 public int saveLayer(RectF bounds,Paint paint,int saveFlags),可以看到这个方法可以接受一个bounds参数。和save()方法不同的地方是,save()方法不能改变新图层的形状,而saveLayer()方法不仅可以创建一个或多个不同形状的图层,还可以指定合并图层的样式。saveLayerAlpha()则是开启一个带透明度的图层。

Canvas.clipPath()支持通过路径来剪贴一块区域。通常我们可用此方法剪贴一个区域,然后调用该Drawable的draw(canvas),来绘制一个图形。如下代码绘制了一个圆形的图片。

Drawable drawable = getResources().getDrawable(R.drawable.image,null);

// 必须调用setBounds方法,因为系统要确定该Drawable的大小。

drawable.setBounds(0,0,1000,1000);

Path path = new Path();

path.addCircle(500,500,500,Path.Direction.CW);

canvas.clipPath(path);

drawable.draw(canvas);

imageView.setImageBitmap(bm);

注意

必须调用setBounds()。设置的bounds想当于设定了该Drawable各条边距离画布坐标轴的距离。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值