效果图
在相应路径下,生成1.png的照片
1. 添加权限
保存图片需要添加读写权限
Android 6.0 - 申请动态权限
2. 新建MyView类并继承View
public class MyView extends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
/*
* Paint.Style.FILL设置只绘制图形内容
* Paint.Style.STROKE设置只绘制图形的边
* Paint.Style.FILL_AND_STROKE设置都绘制
* */
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.BLACK); //设置画笔颜色为:黑色
//paint.setStyle(Paint.Style.STROKE); //空心效果
//paint.setStrokeWidth((float) 3.0); //线宽
//paint.setAntiAlias(true); //设置抗锯齿
//paint.setStrokeWidth(7); //设置笔触宽度
/*
* public static Bitmap createBitmap(int width, int height, Config config)
* 参数一:宽
* 参数一:高
* 参数三: 图片格式
* Bitmap.Config :https://blog.csdn.net/dalancon/article/details/7851143?utm_source=blogxgwz6
* */
Bitmap bitmap = Bitmap.createBitmap(700,700, Bitmap.Config.ARGB_8888);
//将图片指定区域,画到canvas的指定区域 (paint:一般填null)
//drawBitmap :https://blog.csdn.net/lovexieyuan520/article/details/50725539
canvas.drawBitmap(bitmap, 0, 0, null);
/*
* Canvas构造函数需要传入一个Bitmap,该bitmap是我们对canvas进行操作的载体,
* 比如:调用canvas的drawLine方法画一条线,将会把线画到bitmap里去。
* Canvas直接对该Bitmap对象进行修改,Bitmap保存我们的操作。
* */
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE); //设置为白色背景
/*
* public void drawCircle(float cx, float cy, float radius,Paint paint)
* 参数一:圆心的x坐标
* 参数二:圆心的y坐标
* 参数三:圆的半径
* 参数四:绘制时所使用的画笔
* */
canvas.drawCircle(150,150,100,paint); //绘制黑色圆
canvas.save(); //保存
canvas.restore(); // 存储
//存储地址
File file = new File("/storage/emulated/0/1/");
if(!file.exists()){
//如果不存在:根据File里的路径名建立文件夹
file.mkdirs();
}else {
try {
FileOutputStream fos = new FileOutputStream(file.getPath() + "/1.png");
//压缩图片 为百分之30
bitmap.compress(Bitmap.CompressFormat.PNG, 30, fos);
//清空缓冲区数据
fos.flush();
//关闭流
fos.close();
System.out.println("-------------save true------------");
} catch (Exception e) {
e.printStackTrace();
System.out.println("-------------save flase------------");
}
}
}
}
3. MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myView = new MyView(this);
FrameLayout frameLayout = findViewById(R.id.forever);
frameLayout.addView(myView);
}
----------------布局(activity_main.xml)---------------
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/forever"/>
网友评论