Android多媒体之画画板开发案例分享
程序员文章站
2024-03-01 12:03:46
先看看效果:
其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。
核心代码 :...
先看看效果:
其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。
核心代码 :
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) } }
试试觉得很简单呢,赶紧试试吧!
又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。
推荐阅读