Bitmap bmp = Bitmap.createBitmap(getWindowManager().getDefaultDisplay()
.getWidth(),
getWindowManager().getDefaultDisplay().getHeight(),
Bitmap.Config.ARGB_4444);
位图配置:Bitmap.Config
(1)ALPHA_8:用于作为Alpha蒙版的位图,只为Alpha通道分配8位。没有其他颜色值。
(2)ARGB_4444:为每个颜色通道分配4位,包括Alpha通道。允许拥有16个Alpha值得4096种不同的颜色。
(3)ARGB_8888:为每个颜色通道分配8位,包括Alpha通道。允许拥有256个Alpha值得1670万种不同的颜色。
(4)RGB_565:5位用于红色通道,6位用于绿色通道,以及5位用于蓝色通道(没有Alpha通道)。允许有65535种不同的颜色。这个设置几乎
与ARGB_8888具有相同的高质量,但占用更少的内存空间。
canvas=new Canvas(bmp);
paint=new Paint();
//设置画笔颜色1
//int myColor=Color.argb(255, 122, 64, 12);//通过这个方法构造一个特定的颜色0~255之间的值。
//paint.setColor(myColor);
//设置画笔颜色2
paint.setColor(Color.GREEN);//设置画笔颜色,Color.BLACK,Color.BLUE等
paint.setStyle(Paint.Style.STROKE);//设置画笔样式
paint.setStrokeWidth(10);//设置画笔大小
canvas.drawPoint(188, 200, paint);//画点
canvas.drawLine(50, 100, 150, 210, paint);//画线
canvas.drawRect(20, 20, 50, 100, paint);//画矩形
绘画文字:
paint.setTextSize(50);
paint.setTypeface(Typeface.DEFAULT);//文字样式
Path path=new Path();
path.moveTo(20, 20);//开始
path.lineTo(300, 720);
canvas.drawTextOnPath("Why do you always in my heart", path, 0, 0, paint);
手指绘画:
设置监听事件:showImage.setOnTouchListener(this);
private float downX = 0;// 按下x坐标
private float downY = 0;// 按下y坐标
private float upX = 0;// 离开X坐标
private float upY = 0;// 离开Y坐标
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
upX = event.getX();
upY = event.getY();
canvas.drawLine(downX, downY, upX, upY, paint);
showImage.invalidate();//将该对象重新画到屏幕上
downX=upX;
downY=upY;
break;
case MotionEvent.ACTION_UP:
break;
default:
break;
}
return true;
}
保存位图:(有点问题,在研究中。)
if (v.getId() == R.id.save_picture) {
if (bmp != null) {
File dirFile = new File(SAVEPATH);
if (!dirFile.exists()) {
dirFile.mkdir();
}
File filePicture = new File(SAVEPATH + "picture"+".png");
try {
BufferedOutputStream imageFileStream = new BufferedOutputStream(
new FileOutputStream(filePicture));
bmp.compress(CompressFormat.PNG,100, imageFileStream);
imageFileStream.flush();
imageFileStream.close();
Toast.makeText(this, "save success", Toast.LENGTH_SHORT)
.show();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}