布局文件:

<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. C语言visual studio警告:取消对NULL指针“p”的引用
  2. sqlplus 自动换行_sqlplus常用操作命令2
  3. 3到6年的.NETer应该掌握哪些知识
  4. ssm 静态资源处理器
  5. 5000字“肝”了这篇IP协议
  6. python零基础自学教材-零基础的小白怎么学python?
  7. 从尾到头打印链表(六)
  8. ftrace跟踪内核_用Ftrace跟踪内核模块
  9. 使用docker分离服务与数据库
  10. java插件化设计开发
  11. TVS 瞬态抑制二极管如何选型?
  12. linux版本信息以及x86与x86_64的区别
  13. latex参考文献bib基本格式_Latex如何添加参考文献——使用bib
  14. 小白必看 APN/证书/越狱等名词详解
  15. 王道操作系统课代表 - 考研计算机 第一章 计算机概述 究极精华总结笔记
  16. Google Bard vs ChatGPT:哪一个更适合创造富有创造性的文学作品?
  17. sklearn提示cannot import name ‘MaskedArray‘ from ‘sklearn.utils.fixes‘的解决方法
  18. 学好编程的 4 个秘诀
  19. Scalar类-颜色类
  20. SAP中供应商清单输出方法

热门文章

  1. 机器学习与R语言(原书第2版)》一1.4 实践中的机器学习
  2. Qt仿win7自动顶部最大化左侧右侧半屏效果
  3. Android监听返回键、Home键+再按一次返回键退出应用
  4. wyse WES系统操作
  5. ehcahe总结 思维导图
  6. Android LayoutInflater原理分析,带你一步步深入了解View(一) 郭霖学习摘要
  7. 大规模分布式系统资源管理(一)
  8. SpringCloud OpenFeign服务调用客户端介绍及配置使用
  9. idea 启动选择profiles_玩转SpringBoot 2 之项目启动篇
  10. 解决开发问题的思路与心态