欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-02 21:03:16
先看看效果: 其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。 核心代码 :...

先看看效果:

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

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

核心代码 :

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)
  }
}

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

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