Android2D绘图基础

Android 中的 2D 绘图机制,在 Android 中绘制任何图形都需要在 Canvas 上进行,而要使用 Canvas 就必须使用 View.onDraw() 方法完成绘制工作,因此需要我们编写一个继承自 View 的类,并覆盖 onDraw() 方法。下面来详细介绍 Android 中绘图的基础内容。

     一、点

     drawPoint(float x,float y,Paint paint)方法用于在指定点绘制一个点

     drawPoints(float [] pts,int offset,int count,Paint paint)方法用于从pts中的第offest个位置起选取count个元素作为多个点的坐标,因此count为偶数,当count为基数时,将忽略最后一个元素。

     drawPoints(float [] pts,Paint paint)方法是drawPoints()的重载方法,所有坐标都将参与绘制过程。

     二、直线

     drawLine(float startx,float starty,loat stopx,float stopy,Paint paint)方法用于在点(startx,starty)和点(stopx,stopy)之间绘制一条直线

     drawLines(float [] pts,int offset,int count,Paint paint)方法定义类似于drawPoints()方法

     drawLines(float [] pts,Paint paint)方法定义类似于drawPoints()方法

     三、矩形

     drawRect(float x1,float y1,float x2,float y2,Paint paint)方法用于绘制左上角顶点为(x1,y1),右下角顶点为(x2,y2)的矩形

     drawRect(Rect rect,Paint paint)用于绘制一个指定的矩形

     四、多边形

     drawVertices(VertexMode mode,int count,float[] pts,0,null,0,null,0,null,0,0,Paint paint)方法用于绘制一个多边形,其中count为坐标的个数,等于pts的大小。理论上此方法可以绘制矩形,实际上此方法的本质是绘制无数个三角形。具体的参数大家可以自行查阅官方API文档。

     五、弧线

     drawArc(Rect rect,float startAngle,float sweepAngle,bool useCenter,Paint paint)方法用于在矩形rect内部(此矩形并不会绘制)绘制一个起始角度为startAngle,结束角度为sweepAngle的弧,useCenter将决定这段弧是否会显示起点与终点的连线。当sweepAngle-startAngle=360时,绘制效果是一个椭圆。

     六、圆

    drawCircle(float cx,float cy,float r,Paint paint)方法将绘制一个以(cx,cy)为圆心,r为半径的圆。

    七、文字

    drawText(String s, float x, float y, Paint paint)方法将在(x,y)处绘制字符串s.

    八、位图

    drawBitmap(Bitmap bitmap,float left,float top,Paint paint)

    drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint) 

    九、Paint 

    Paint是笔刷类,主要用于设置绘图相关的属性。主要方法:

   setColor()方法用于设定笔刷颜色

    setStrokeWidth()方法用于设定笔刷宽度

    setStyle()方法用于设定笔刷的样式

     暂时就介绍到这里吧,更多的方法大家可以自己去了解,下面给出我的示例代码,供大家参考:

     1、继承自View的DrawView

001 packagecom.android.DroidDraw; 
002    
003 importandroid.annotation.SuppressLint; 
004 importandroid.content.Context; 
005 importandroid.graphics.Bitmap; 
006 importandroid.graphics.BitmapFactory; 
007 importandroid.graphics.Canvas; 
008 importandroid.graphics.Canvas.VertexMode; 
009 importandroid.graphics.Color; 
010 importandroid.graphics.Paint; 
011 importandroid.graphics.Paint.Style; 
012 importandroid.graphics.Rect; 
013 importandroid.graphics.RectF; 
014 importandroid.view.View; 
015    
016 public class DrawView extendsView  
017
018    
019     publicDrawView(Context mContext) { 
020         super(mContext); 
021         setBackgroundColor(Color.BLACK); 
022     
023        
024     @SuppressLint("DrawAllocation"
025     @Override 
026     protected voidonDraw(Canvas mCanvas)  
027     
028         super.onDraw(mCanvas); 
029         //定义4个点的集合 
030             float[] mPoints=newfloat[]{150,20,35,150,200,30,78,60}; 
031         //创建笔刷 
032         Paint mPaint=newPaint(); 
033         //设置笔刷颜色为白色 
034         mPaint.setColor(Color.WHITE); 
035         //设置画笔大小 
036         mPaint.setStrokeWidth(1); 
037         //在(100,20)绘制一点 
038         mCanvas.drawPoint(10020, mPaint); 
039            
040         //设置笔刷颜色为白色 
041         mPaint.setColor(Color.WHITE); 
042         //设置画笔大小 
043         mPaint.setStrokeWidth(1); 
044         //在(100,20)绘制一点 
045         mCanvas.drawPoint(10020, mPaint); 
046         //在指定坐标处绘制一组点 
047         mCanvas.drawPoints(mPoints, mPaint); 
048            
049         //在(20,35)、(45,200)两点间绘制一条直线 
050         mCanvas.drawLine(203545200, mPaint); 
051         //由给定的点集合绘制一系列直线 
052         mCanvas.drawLines(mPoints, mPaint); 
053            
054         //通过绘制直线绘制三角形 
055         mCanvas.drawLine(203545200, mPaint); 
056         mCanvas.drawLine(452005580, mPaint); 
057         mCanvas.drawLine(55802035, mPaint); 
058            
059         //通过绘制多边形绘制三角形 
060         mCanvas.drawVertices(VertexMode.TRIANGLE_FAN, 6newfloat[]{20,35,45,200,55,80}, 0null0null0null00, mPaint); 
061            
062         //绘制矩形 
063         mCanvas.drawRect(newRect(20,210,100,255), mPaint); 
064         //绘制二维码校准框 
065         mPaint.setStyle(Style.STROKE); 
066         //绘制矩形框 
067         mCanvas.drawRect(newRect(10,10,110,110), mPaint); 
068         //绘制左上角 
069         mCanvas.drawLine(20202050, mPaint); 
070         mCanvas.drawLine(20205020, mPaint); 
071         //绘制左下角 
072         mCanvas.drawLine(201002070, mPaint); 
073         mCanvas.drawLine(2010050100, mPaint); 
074         //绘制右上角 
075         mCanvas.drawLine(100207020, mPaint); 
076         mCanvas.drawLine(1002010050, mPaint); 
077         //绘制右下角 
078         mCanvas.drawLine(10010010070, mPaint); 
079         mCanvas.drawLine(10010070100, mPaint); 
080            
081         //绘制圆 
082         mCanvas.drawCircle(12012050, mPaint); 
083            
084         //绘制弧 
085         mCanvas.drawArc(newRectF(50,24,60,75), 30f, 120f, true, mPaint); 
086            
087         //绘制椭圆 
088         mCanvas.drawArc(newRectF(50,64,80,75), 0f, 360f, true, mPaint); 
089            
090         //绘制文字 
091         mCanvas.drawText("Android绘图基础"100150, mPaint); 
092            
093         //绘制位图 
094         Bitmap mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.t); 
095         mCanvas.drawBitmap(mBitmap,  
096                 newRect(0,0,mBitmap.getWidth(), mBitmap.getHeight()), 
097                 newRect(200,200,mBitmap.getWidth()/2, mBitmap.getHeight()/2),  
098                 mPaint); 
099     
100    
101    
102 }

 

       2、主类MainActivity

01 packagecom.android.DroidDraw; 
02    
03 importandroid.os.Bundle; 
04 importandroid.app.Activity; 
05 importandroid.view.Menu; 
06    
07 public class MainActivity extendsActivity { 
08    
09     @Override 
10     protected voidonCreate(Bundle savedInstanceState) { 
11         super.onCreate(savedInstanceState); 
12         DrawView mView=newDrawView(this); 
13         setContentView(mView); 
14     
15    
16     @Override 
17     public booleanonCreateOptionsMenu(Menu menu) { 
18         // Inflate the menu; this adds items to the action bar if it is present. 
19         getMenuInflater().inflate(R.menu.main, menu); 
20         returntrue
21     
22    
23 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值