当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发实现各种图形绘制功能示例

Android开发实现各种图形绘制功能示例

2019年07月24日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网