先看看效果:
其实画画板的原理很简单,就是首先记录下按下屏幕的点,然后每移动一下就让这两次移动的点连线,周而复始,图像就由很多条直线构成了。
核心代码 :
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) }}
试试觉得很简单呢,赶紧试试吧!
又到周五了,希望大家有个快乐周末,谢谢大家一直对小编的支持,小编一定会再接再厉,为大家分享更多精彩的文章。
总结以上是内存溢出为你收集整理的Android多媒体之画画板开发案例分享全部内容,希望文章能够帮你解决Android多媒体之画画板开发案例分享所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)