布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageView android:id="@+id/iv"android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent"/><Buttonandroid:id="@+id/btn"android:layout_weight="6"android:onClick="save"android:layout_width="match_parent"android:layout_height="match_parent"android:text="保存图片"/>
</LinearLayout>

MainActivity:

public class MainActivity extends Activity {private Button button;private ImageView p_w_picpathView;private Bitmap baseBitmap;private Canvas canvas;private Paint paint;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);p_w_picpathView=(ImageView) findViewById(R.id.iv);paint=new Paint();paint.setColor(Color.BLUE);//创建一个可修改的BitmapbaseBitmap=Bitmap.createBitmap(480, 320, Bitmap.Config.ARGB_8888);canvas=new Canvas(baseBitmap);canvas.drawColor(Color.WHITE);p_w_picpathView.setOnTouchListener(new OnTouchListener() {//定义手指坐标int startx;int starty;@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startx=(int) event.getX();starty=(int) event.getY();             break;case MotionEvent.ACTION_MOVE: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(); p_w_picpathView.setImageBitmap(baseBitmap);break;case MotionEvent.ACTION_UP:break;}return true;}});    }public void save(View v) {try {File file=new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis()+".jpg");FileOutputStream fos=new FileOutputStream(file);baseBitmap.compress(CompressFormat.JPEG, 100, fos);//第一个参数为图片格式fos.close();Toast.makeText(this, "保存图片成功", 2000).show();//模拟消息:SD卡被重新挂载了Intent intent=new Intent();intent.setAction(intent.ACTION_MEDIA_MOUNTED);intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));sendBroadcast(intent);} catch (FileNotFoundException e) {Toast.makeText(this, "保存图片失败", 2000).show();e.printStackTrace();} catch (IOException e) {e.printStackTrace();}              }
}

因为要存入SD中,所以还要加一个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

运行结果:

转载于:https://blog.51cto.com/shaotao/1299628

Android -- 图片画画板(canvas、paint、bitmap)相关推荐

  1. Android 实现图片画画板

    本文主要讲述了Android 实现图片画画板 设计项目布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...

  2. Android可滑动画板,Android实现画画板案例

    本文实例为大家分享了Android实现画画板的具体代码,供大家参考,具体内容如下 ① 准备一个布局文件 xmlns:tools="http://schemas.android.com/too ...

  3. 将图片画到canvas 上的几种方法

    我的网站:http://www.mzzy8.com/ 任何的知识体系,都是由小的知识体系构成,你要想成为高手 无法第一步就是把所有的琐碎的知识都搞定它! 写的多了,自然就会了,这也是为啥要写笔记,写笔 ...

  4. 学习android 画板源代码,Android实现画画板案例

    郑州app开发画画板案例.布局代码是三个button和一个imagesview下面是图片. 布局代码就不展示了.下面是java代码. package cn.xhhkj.image; import an ...

  5. android地图图片加载,Android图片加载解析之Bitmap

    写在前面的话,本篇文章是参考自<Android开发艺术探索>所写,看此书已是2015年的事情啦,由于独立开放项目,以至于对于Android原理性东西生疏,最近需要换工作,重新捡起此书,仍有 ...

  6. Android图片加载之认识bitmap的四种加载方式

    Android的Bitmap有四种高效加载方式 从获取方式分: (1)以文件流的方式 假设在sdcard下有 test.png图片 FileInputStream fis = new FileInpu ...

  7. 把base64格式图片画到canvas画布上(干货建议收藏)

    应用场景: 使用时将里面的base数据替换即可,画布大小进行修改 如果在vue使用时必须在mounted里面.或者点击触发,因为在这个生命周期后才能获取dom元素 JavaScript: <!D ...

  8. 将base64格式的图片画到canvas上(js和vue两种)

    使用时将里面的base数据替换即可,画布大小进行修改 vue使用时必须在mounted里面.或者点击触发,因为在这个生命周期后才能获取dom元素 js <!DOCTYPE html> &l ...

  9. android canvans 画3d,Canvas 3D梯形

    JavaScript 语言: JaveScriptBabelCoffeeScript 确定 var w = c.width = window.innerWidth, h = c.height = wi ...

最新文章

  1. CentOS 7安装Redis服务
  2. 探索 YOLO v3 实现细节 - 第6篇 预测 (完结)
  3. 【云炬大学生创业基础笔记】第1章第1节 测试
  4. MySQL设置表的字符编码为utf-8
  5. cap流程图_3D流程图
  6. 机器学习-分类之多层感知机原理及实战
  7. MATLAB读写Excel数据
  8. [书籍推荐]《软件设计精要与模式(第2版)》-张逸——提高设计模式及软件设计的方法...
  9. 怎么恢复linux定时器任务,定时操作 crontab at 以及恢复定时操作
  10. Docker Kubernetes 环境搭建
  11. 利用python os模块搜索指定目录下包含指定字符的文件
  12. Highcharts数据可视化工具功能效果图详解
  13. mysql 求平方_如何用MySQL求一个范围内的完全平方数
  14. BUUCTF-Crypto-rabbit+篱笆墙上的影子(栅栏密码)+RSA题解
  15. python 全国省市区列表查询
  16. C# 博思得 POSTEK 打印机 打码机 SDK 二次开发 指令打印
  17. java中的守护线的应用_JVM中的守护线程示例详解
  18. 微信小程序-弹出自定义对话框
  19. FPGA时序约束建立时间与保持时间概念
  20. 程序界搬砖工教你在Linux系统下如何使用Python虚拟环境(干货篇)

热门文章

  1. 博客专题计划:《在实践中深入理解常见网络协议》
  2. 从一个表复制到另一个表SQL
  3. 过春节,坐汽车回家的朋友,注意了。。
  4. 想到Exchanger N parties的一种用法
  5. 字符串匹配BF/RK/BM/KMP算法
  6. RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现
  7. (干货!)Tomcat性能优化
  8. 工程师软技能5:生产力
  9. 依赖注入框架 wire
  10. python爬虫03