package com.itheima.paint;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;
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);
iv=(ImageView) findViewById(R.id.iv);
paint=new Paint();//创建一个画笔
paint.setStrokeWidth(6);//设置画笔的宽度
paint.setColor(Color.RED);//设置画笔的颜色
//创建一个可以被修改的bitmap
baseBitmap=Bitmap.createBitmap(288, 327, Bitmap.Config.ARGB_8888);//前两个参数分别为宽度和高度
System.out.println("宽度:"+iv.getWidth());
System.out.println("高度:"+iv.getHeight());
canvas=new Canvas(baseBitmap);//以 baseBitmap 为基准创建一个画布
canvas.drawColor(Color.WHITE);//给画布设定颜色
//知道用户手指在屏幕上移动的轨迹
iv.setOnTouchListener(new OnTouchListener() {
//获取手指开始的坐标
int startX;
int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("手指按下");
startX=(int) event.getX();
startY=(int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
System.out.println("手指移动");
int newX=(int) event.getX();
int newY=(int) event.getY();
canvas.drawLine(startX, startY, newX, newY, paint);
//重新更新画笔的开始位置、
startX=(int) event.getX();
startY=(int) event.getY();
iv.setImageBitmap(baseBitmap);
break;
default:
break;
}
return true;//如果想要onTouch这个事件不停地执行 应该将此返回值设置为true
}
});
}
public void save(View view){
try {
String fileName=System.currentTimeMillis()+".jpg";//保存图片的名称
File file=new File(Environment.getExternalStorageDirectory(),fileName);
FileOutputStream outstream=new FileOutputStream(file);
baseBitmap.compress(CompressFormat.JPEG, 100, outstream);
outstream.close();
Toast.makeText(this,"保存图片成功",1).show();
//模拟一个消息通知系统SD卡被重新挂载了 目的是为了让图库加载刚刚保存的图片
//MediaScannerConnection.scanFile(Context context, String[] paths, String[] mimeTypes,OnScanCompletedListener callback)
//这是一个静态方法,使用就比较简单了。OnScanCompletedListener 可实现可不实现,
//它只有一个方法,在扫描完成的时候回调。scanFile 静态方法可以一次传递多个文件,
//如果 mimeTypes 不为空,就必须于 paths 的长度一致。mimeTypes 可以为空。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//如果是4.4及以上版本
//安卓4.4及以上版本 使用
MediaScannerConnection.scanFile(this,
new String[]{Environment.getExternalStorageDirectory() + "/" + fileName},
null, null);//共四个参数
}else{
//注意以下方法只能在 安卓4.4之前(不包括安卓4.4) 使用
Intent intent= new Intent();
intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
sendBroadcast(intent);
}
} catch (Exception e) {
Toast.makeText(this,"保存图片失败",1).show();
e.printStackTrace();
}
}
}
关于Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED
最新推荐文章于 2021-05-27 05:03:43 发布