画画板功能实现

1 获取一张背景图片 BitmpFactory.decodeResource

2 创建一个副本

3 设置imageview的onTouch事件 判断事件的类型, 根据事件的 类型获取 开始和结束的位置 划线 重新设置给imagevie

4 获取imageview被操作的事件类型 event.getAction

5 鼠标按下 抬起 移动操作

6 将图片保存至图库

public classMainActivityextendsAppCompatActivityimplementsView.OnClickListener{

privateBitmapbitmap_copy;//原图 副本

private  floatstartX;

private  floatstartY;

privatePaintpaint;

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private voidinitView() {

findViewById(R.id.bt_save).setOnClickListener(this);

findViewById(R.id.bt_strong).setOnClickListener(this);

findViewById(R.id.bt_white).setOnClickListener(this);

finalImageView iv_imageview = (ImageView) findViewById(R.id.iv_imageview);

//将图片资源文件 转化成bitmap

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.bg1);//原图

//将原图cope一份作为 作画的 白纸

bitmap_copy= bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());

//创建画笔

paint=newPaint();

paint.setColor(Color.RED);

//创建画板 将白纸铺到 画板上

finalCanvas canvas =newCanvas(bitmap_copy);

//将 原图 画在画板上

canvas.drawBitmap(bitmap,newMatrix(),paint);

//将图片的副本 设置给imageview、

iv_imageview.setImageBitmap(bitmap_copy);

//设置imageview的ontouchevent时间

iv_imageview.setOnTouchListener(newView.OnTouchListener() {

@Override

public booleanonTouch(View v,MotionEvent event) {

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN://按下

//获取按下时的x,y轴

startX= event.getX();

startY= event.getY();

break;

caseMotionEvent.ACTION_UP://抬起

break;

caseMotionEvent.ACTION_MOVE://移动

//获取移动后的x,y轴

floatstopX = event.getX();

floatstopY = event.getY();

for(inti =0;i<3;i++){

canvas.drawLine(startX+i,startY+i,stopX+i,stopY+i,paint);

}

//将结束的 位置 赋值 给开始的位置

startX= stopX;

startY= stopY;

iv_imageview.setImageBitmap(bitmap_copy);

break;

}

//返回false代表 上一个 事件未消耗不能执行事件  例如:返回false时  只能执行按下事件  返回true时则 可以执行下面的事件

return true;

}

});

}

@Override

public voidonClick(View v) {

switch(v.getId()){

caseR.id.bt_save://保存

saveImageToGallery(this,bitmap_copy);

break;

caseR.id.bt_strong://加粗

paint.setStrokeWidth(15);

break;

caseR.id.bt_white://白色

paint.setColor(Color.WHITE);

break;

}

}

public  voidsaveImageToGallery(Context context,Bitmap bmp) {

if(bmp ==null){

Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

return;

}

//首先保存图片

File appDir =newFile(Environment.getExternalStorageDirectory(),"lishuai");

if(!appDir.exists()) {

appDir.mkdir();

}

String fileName = System.currentTimeMillis() +".jpg";

File file =newFile(appDir,fileName);

try{

FileOutputStream fos =newFileOutputStream(file);

bmp.compress(Bitmap.CompressFormat.JPEG,100,fos);

fos.flush();

fos.close();

}catch(FileNotFoundException e) {

Toast.makeText(this,"文件未发现",Toast.LENGTH_LONG).show();

e.printStackTrace();

}catch(IOException e) {

Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

e.printStackTrace();

}catch(Exception e){

Toast.makeText(this,"保存出错了",Toast.LENGTH_LONG).show();

e.printStackTrace();

}

//最后通知图库更新

try{

MediaStore.Images.Media.insertImage(context.getContentResolver(),file.getAbsolutePath(),fileName, null);

}catch(FileNotFoundException e) {

e.printStackTrace();

}

Intent intent =newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

Uri uri = Uri.fromFile(file);

intent.setData(uri);

context.sendBroadcast(intent);

Toast.makeText(this,"保存成功了",Toast.LENGTH_LONG).show();

}

}

你可能感兴趣的:(画画板功能实现)