1 獲取一張背景圖片 BitmpFactory.decodeResource
2 創(chuàng)建一個(gè)副本
3 設(shè)置imageview的onTouch事件 判斷事件的類型行瑞, 根據(jù)事件的 類型獲取 開始和結(jié)束的位置 劃線 重新設(shè)置給imagevie
4 獲取imageview被操作的事件類型 event.getAction
5 鼠標(biāo)按下 抬起 移動(dòng)操作
6 將圖片保存至圖庫(kù)
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);
//將圖片資源文件 轉(zhuǎn)化成bitmap
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.bg1);//原圖
//將原圖cope一份作為 作畫的 白紙
bitmap_copy= bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
//創(chuàng)建畫筆
paint=newPaint();
paint.setColor(Color.RED);
//創(chuàng)建畫板 將白紙鋪到 畫板上
finalCanvas canvas =newCanvas(bitmap_copy);
//將 原圖 畫在畫板上
canvas.drawBitmap(bitmap,newMatrix(),paint);
//將圖片的副本 設(shè)置給imageview、
iv_imageview.setImageBitmap(bitmap_copy);
//設(shè)置imageview的ontouchevent時(shí)間
iv_imageview.setOnTouchListener(newView.OnTouchListener() {
@Override
public booleanonTouch(View v,MotionEvent event) {
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN://按下
//獲取按下時(shí)的x,y軸
startX= event.getX();
startY= event.getY();
break;
caseMotionEvent.ACTION_UP://抬起
break;
caseMotionEvent.ACTION_MOVE://移動(dòng)
//獲取移動(dòng)后的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);
}
//將結(jié)束的 位置 賦值 給開始的位置
startX= stopX;
startY= stopY;
iv_imageview.setImageBitmap(bitmap_copy);
break;
}
//返回false代表 上一個(gè) 事件未消耗不能執(zhí)行事件? 例如:返回false時(shí)? 只能執(zhí)行按下事件? 返回true時(shí)則 可以執(zhí)行下面的事件
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,"保存出錯(cuò)了",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,"文件未發(fā)現(xiàn)",Toast.LENGTH_LONG).show();
e.printStackTrace();
}catch(IOException e) {
Toast.makeText(this,"保存出錯(cuò)了",Toast.LENGTH_LONG).show();
e.printStackTrace();
}catch(Exception e){
Toast.makeText(this,"保存出錯(cuò)了",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
//最后通知圖庫(kù)更新
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();
}
}