Java代码:
public class MainActivity extends Activity {
private ImageView iv;
private Bitmap baseBitmap;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
float density = dm.density;
int bitmapWidth = dm.widthPixels;
int bitmapHeight = dm.heightPixels;
int paintWidth = 5;
getCanvas(Color.GRAY,Color.RED,paintWidth,bitmapWidth,bitmapHeight);
}
/**
* @param canvasColor 画布颜色
* @param paintColor 画笔颜色
* @param paintWidth 画笔宽度
* @param bitmapWidth 画布宽度
* @param bitmapHeight 画布宽度
*/
public void getCanvas(int canvasColor,int paintColor,int paintWidth,int bitmapWidth,int bitmapHeight){
this.iv = (ImageView) this.findViewById(R.id.iv);
// 创建一张空白图片
baseBitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
// 创建一张画布
canvas = new Canvas(baseBitmap);
// 画布背景为灰色
canvas.drawColor(canvasColor);
// 创建画笔
paint = new Paint();
// 画笔颜色为红色
paint.setColor(paintColor);
// 宽度5个像素
paint.setStrokeWidth(paintWidth);
// 先将灰色背景画上
canvas.drawBitmap(baseBitmap, new Matrix(), paint);
iv.setImageBitmap(baseBitmap);
iv.setOnTouchListener(new View.OnTouchListener() {
int startX;
int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 获取手按下时的坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 获取手移动后的坐标
int stopX = (int) event.getRawX();
int stopY = (int) event.getRawY();
// 在开始和结束坐标间画一条线
canvas.drawLine(startX, startY, stopX, stopY, paint);
// 实时更新开始坐标
startX = (int) event.getRawX();
startY = (int) event.getRawY();
iv.setImageBitmap(baseBitmap);
break;
}
return true;
}
});
}
/**
* 保存
* @param view
*/
public void save(View view) {
try {
//获取内部存储状态
String state = Environment.getExternalStorageState();
//如果状态不是mounted,无法读写
if (state.equals(Environment.MEDIA_MOUNTED)) {
File file = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
System.out.println("路径:"+file.toString());
OutputStream stream = new FileOutputStream(file);
baseBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
stream.flush();
stream.close();
// 模拟一个广播,通知系统sdcard被挂载
Intent intent = new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment
.getExternalStorageDirectory()));
sendBroadcast(intent);
Toast.makeText(this, "保存图片成功", (int)0).show();
}else{
Toast.makeText(this, "状态不是mounted,无法读写", (int)0).show();
}
} catch (Exception e) {
Toast.makeText(this, "保存图片失败", (int)0).show();
e.printStackTrace();
}
}
}
布局:
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>