画板案例:
步骤:
步骤一:声明一些全局上使用的变量:
//接收布局文件上的图片显示控件
privateImageViewiv;
//声明一个可以用来编辑的bitmap
privateBitmapbaseBitmap;
//画布的声明
privateCanvascanvas;
//画笔的声明
privatePaintpaint;
步骤二:初始化声明的变量并设置一些属性:
//获取布局文件上的图片控件
iv= (ImageView) findViewById(R.id.iv);
//创建一个可以被修改的bitmap
// Bitmap.Config.ARGB_8888指定的是显示的色彩效果
baseBitmap= Bitmap.createBitmap(320, 360, Bitmap.Config.ARGB_8888);
//创建画布canvas
canvas=newCanvas(baseBitmap);
//设置背景
canvas.drawColor(Color.WHITE);
//获取画笔
paint=newPaint();
//设置画笔的像素点
paint.setStrokeWidth(2);
//设置画笔的颜色
paint.setColor(Color.BLACK);
步骤三:关键的步骤
//图片控件上添加一个触摸监听,用来监听用户的触摸轨迹
iv.setOnTouchListener(newOnTouchListener() {
//设置手指触摸的坐标点
floatstartX;
floatstartY;
/**
*
* @paramv
* 代表的是显示控件
* @paramevent
* 代表的是触摸的事件
*
* @seeandroid.view.View.OnTouchListener#onTouch(android.view.View,
* android.view.MotionEvent)
*/
@Override
publicbooleanonTouch(View v, MotionEvent event) {
/*对触摸的事件进行判断*/
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN://手指第一次触摸屏幕
System.out.println("手指按下.............");
//获取开始的坐标点
startX= event.getX();
startY= event.getY();
break;
caseMotionEvent.ACTION_MOVE://手指在屏幕上的移动
System.out.println("手指移动.............");
//获取结束的坐标点(由于是移动的,所以这是适时改变的)
floatstopX = event.getX();
floatstopY = event.getY();
//在画布上作画
canvas.drawLine(startX,startY,
stopX, stopY,paint);
//画完后要对画笔的位置进行时时的更新
startX= event.getX();
startY= event.getY();
break;
caseMotionEvent.ACTION_UP://手指离开屏幕
System.out.println("手指离开.............");
break;
}
iv.setImageBitmap(baseBitmap);
//触摸事件的时时响应要更改为true
returntrue;
}
});
步骤四:保存文件的操作,应用来相应按钮点击事件
/**
* 保存文件的操作
*
* @paramView
*/
publicvoidsave(View View) {
try{
//创建文件
File file = newFile(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() +".jpg");
FileOutputStream os =newFileOutputStream(file);
//压缩操作
baseBitmap.compress(CompressFormat.JPEG, 100, os);
os.close();
Toast.makeText(this,"保存成功.....",
Toast.LENGTH_SHORT).show();
//模拟消息,通知SD卡挂在的操作
Intent intent = newIntent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment
.getExternalStorageDirectory()));
sendBroadcast(intent);
} catch(Exception e) {
//TODOAuto-generatedcatch block
e.printStackTrace();
Toast.makeText(this,"保存失败.....",
Toast.LENGTH_SHORT).show();
}
}
DEMO下载:
原文:http://blog.csdn.net/dong_martin/article/details/28643259