效果图

  • 在相应路径下,生成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"/>

更多相关文章

  1. Android(安卓)设置View 圆角
  2. Android使用MQTT协议
  3. Android(安卓)--spinner构造下垃菜单
  4. Android(安卓)ImageView图片自适应
  5. android 设置特殊字体
  6. 按键及其居中
  7. Android(安卓)jni中数组参数的传递方式
  8. mybatisplus的坑 insert标签insert into select无参数问题的解决
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. Android(安卓)兼容性测试(CTS)
  2. android之Buffer类及子类学习
  3. Android(安卓)layout_alignBottom 注意事
  4. Android(安卓)获取联系人
  5. Android(安卓)View And Activity
  6. Android
  7. 多个控件跑马灯效果
  8. Android(安卓)studio 多渠道打包以及自定
  9. Android(安卓)总结 Android(安卓)系统架
  10. android网络访问兼容