Android开发实现各种图形绘制功能示例
本文实例讲述了android开发实现各种图形绘制功能。分享给大家供大家参考,具体如下:
这里结合本人的开发事例,简单介绍一下如何在android平台下实现各种图形的绘制。
首先自定义一个view类,这个view类里面需要一个paint对象来控制图形的属性,需要一个path对象来记录图形绘制的路径,需要一个canvas类来执行绘图操作,还需要一个bitmap类来盛放绘画的结果。
paint mpaint = new paint(); mpaint.setantialias(true); mpaint.setcolor(0xffff0000); mpaint.setstyle(paint.style.stroke); mpaint.setstrokewidth(12);
以上代码初始化了paint对象,设置了画笔的颜色、类型和粗细。
bitmapmforebitmap = bitmap.createbitmap(mwidth, mheight, bitmap.config.argb_8888); canvasmcanvas = new canvas(mforebitmap); pathmpath = new path();
以上代码创建了一个bitmap对象,并将他作为参数传给了canvas对象,同时初始化path对象。
想让view响应用户的触摸事件,需要实现view类的ontouchevent函数,代码如下:
@override public boolean ontouchevent(motionevent event) { float x = event.getx(); float y = event.gety(); switch (event.getaction()) { case motionevent.action_down: touch_start(x, y); invalidate(); break; case motionevent.action_move: touch_move(x, y); invalidate(); break; case motionevent.action_up: touch_up(); invalidate(); break; } return true; }
其中touch_start,touch_move和touch_up函数分别处理按下,移动和抬起事件,函数的实现将在后面介绍,invalidate函数会调用ondraw函数保证绘图效果实时显示出来。
touch_start函数实现如下
mpath.reset(); mpath.moveto(x,y); mx= x; my= y;
每次清空path,移动到起点处,并记录起点。
touch_move函数实现如下:
switch(mshape) { case 1: float dx = math.abs(x - mx); float dy = math.abs(y - my); if (dx >= touch_tolerance || dy >= touch_tolerance) { mpath.quadto(mx, my, (x + mx)/2, (y + my)/2); mx = x; my = y; }break; case 2: mpath.reset(); mpath.moveto(mx, my); mpath.lineto(x, y); break; case 3: mpath.reset(); rectf mrect = new rectf(); mrect.set(mx, my, x, y); mpath.addoval(mrect, path.direction.cw); break; case 4: mpath.reset(); rectf mrect1 = new rectf(); mrect1.set(mx, my, x, y); mpath.addrect(mrect1, path.direction.cw); break; }
根据mshape的值绘制不同的图形,为1时绘制bezier曲线,为2时绘制直线,为3时绘制椭圆,为4是绘制矩形,分别调用path类的不同函数实现。
touch_up函数实现如下:
mcanvas.drawpath(mpath,mpaint); mpath.reset();
将path绘制到canvas的bitmap里
最后在ondraw函数里需要把当前的bitmap绘制出来。
protectedvoid ondraw(canvas canvas) { // todo auto-generated method stub super.ondraw(canvas); canvas.drawbitmap(mbitmap,0, 0, mbitmappaint); }
大功告成,截图如下:
更多关于android相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。