当前位置: 移动技术网 > IT编程>移动开发>Android > Android多媒体之画画板开发案例分享

Android多媒体之画画板开发案例分享

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

留学生被老乡绑架,魔刀传说,欧白大

先看看效果:

其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。

核心代码 :

public class mainactivity extends activity implements onclicklistener,onseekbarchangelistener {

  private view red_view,green_view,blue_view;   //控制画笔颜色的三块区域
  private seekbar seekbar;    //控制画笔粗细的拖动条
  private imageview iv;  
  private bitmap bitmap,backgroud;  //画纸和背景图
  private canvas canvas;       //画布
  private paint paint;        //画笔
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_main);
    red_view = findviewbyid(r.id.red_view);
    green_view = findviewbyid(r.id.green_view);
    blue_view = findviewbyid(r.id.blue_view);
    seekbar = (seekbar) findviewbyid(r.id.seekbar);
    iv = (imageview) findviewbyid(r.id.iv);
    iv.setimageresource(r.drawable.bg);
    //拿到背景图
    backgroud = bitmapfactory.decoderesource(getresources(), r.drawable.bg);
    //拿到和背景图一样大小的画纸
    bitmap = bitmap.createbitmap(backgroud.getwidth(), backgroud.getheight(), backgroud.getconfig());
    //把画纸固定在画布上
    canvas = new canvas(bitmap);
    //拿到画笔
    paint = new paint();
    paint.setcolor(color.black);//设置画笔颜色为黑色
    paint.setstyle(style.stroke);//设置画笔为空心
    //添加处理规则
    matrix matrix = new matrix();
    //照着背景图画
    canvas.drawbitmap(backgroud, matrix, paint);
    red_view.setonclicklistener(this);
    green_view.setonclicklistener(this);
    blue_view.setonclicklistener(this);
    seekbar.setonseekbarchangelistener(this);
    iv.setontouchlistener(new ontouchlistener() {
      float startx;
      float starty;
      @override
      public boolean ontouch(view v, motionevent event) {
        switch (event.getaction()) {
        //获取按下时的坐标
        case motionevent.action_down:
          startx = event.getx();
          starty = event.gety();
          break;
        //获取移动时的坐标
        case motionevent.action_move:
          float stopx = event.getx();
          float stopy = event.gety();
//          // 在开始和结束坐标间画一条线
          canvas.drawline(startx, starty, stopx, stopy, paint);
          //实时更新坐标(通过不断画线)
          startx = event.getx();
          starty = event.gety();

          iv.setimagebitmap(bitmap);
          break;
        case motionevent.action_up:
          break;
        default:
          break;
        }
        return true;
      }
    });
  }
  @override
  public void onclick(view v) {
    switch (v.getid()) {
    case r.id.red_view:
      //当点击红色区域的时候设置画笔颜色为红色
      paint.setcolor(color.red);
      break;
    case r.id.green_view:
      //当点击绿色区域的时候设置画笔颜色为绿色
      paint.setcolor(color.green);
      break;
    case r.id.blue_view:
      //当点击蓝色区域的时候设置画笔颜色为蓝色
      paint.setcolor(color.blue);
      break;
    default:
      break;
    }
  }
  //拖动条的值改变的时候调用
  @override
  public void onprogresschanged(seekbar seekbar, int progress,
      boolean fromuser) {

  }
  //开始拖动时调用
  @override
  public void onstarttrackingtouch(seekbar seekbar) {

  }
  //停止拖动时调用
  @override
  public void onstoptrackingtouch(seekbar seekbar) {
    int progress = seekbar.getprogress();//拖动条默认的最大值为100
    paint.setstrokewidth(progress/10f);//控制画笔的粗细范围(0-10)
  }
}

试试觉得很简单呢,赶紧试试吧!

又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网