Android -- 图片画画板(canvas、paint、bitmap)
布局文件:
<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)相关推荐
- Android 实现图片画画板
本文主要讲述了Android 实现图片画画板 设计项目布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- Android可滑动画板,Android实现画画板案例
本文实例为大家分享了Android实现画画板的具体代码,供大家参考,具体内容如下 ① 准备一个布局文件 xmlns:tools="http://schemas.android.com/too ...
- 将图片画到canvas 上的几种方法
我的网站:http://www.mzzy8.com/ 任何的知识体系,都是由小的知识体系构成,你要想成为高手 无法第一步就是把所有的琐碎的知识都搞定它! 写的多了,自然就会了,这也是为啥要写笔记,写笔 ...
- 学习android 画板源代码,Android实现画画板案例
郑州app开发画画板案例.布局代码是三个button和一个imagesview下面是图片. 布局代码就不展示了.下面是java代码. package cn.xhhkj.image; import an ...
- android地图图片加载,Android图片加载解析之Bitmap
写在前面的话,本篇文章是参考自<Android开发艺术探索>所写,看此书已是2015年的事情啦,由于独立开放项目,以至于对于Android原理性东西生疏,最近需要换工作,重新捡起此书,仍有 ...
- Android图片加载之认识bitmap的四种加载方式
Android的Bitmap有四种高效加载方式 从获取方式分: (1)以文件流的方式 假设在sdcard下有 test.png图片 FileInputStream fis = new FileInpu ...
- 把base64格式图片画到canvas画布上(干货建议收藏)
应用场景: 使用时将里面的base数据替换即可,画布大小进行修改 如果在vue使用时必须在mounted里面.或者点击触发,因为在这个生命周期后才能获取dom元素 JavaScript: <!D ...
- 将base64格式的图片画到canvas上(js和vue两种)
使用时将里面的base数据替换即可,画布大小进行修改 vue使用时必须在mounted里面.或者点击触发,因为在这个生命周期后才能获取dom元素 js <!DOCTYPE html> &l ...
- android canvans 画3d,Canvas 3D梯形
JavaScript 语言: JaveScriptBabelCoffeeScript 确定 var w = c.width = window.innerWidth, h = c.height = wi ...
最新文章
- CentOS 7安装Redis服务
- 探索 YOLO v3 实现细节 - 第6篇 预测 (完结)
- 【云炬大学生创业基础笔记】第1章第1节 测试
- MySQL设置表的字符编码为utf-8
- cap流程图_3D流程图
- 机器学习-分类之多层感知机原理及实战
- MATLAB读写Excel数据
- [书籍推荐]《软件设计精要与模式(第2版)》-张逸——提高设计模式及软件设计的方法...
- 怎么恢复linux定时器任务,定时操作 crontab at 以及恢复定时操作
- Docker Kubernetes 环境搭建
- 利用python os模块搜索指定目录下包含指定字符的文件
- Highcharts数据可视化工具功能效果图详解
- mysql 求平方_如何用MySQL求一个范围内的完全平方数
- BUUCTF-Crypto-rabbit+篱笆墙上的影子(栅栏密码)+RSA题解
- python 全国省市区列表查询
- C# 博思得 POSTEK 打印机 打码机 SDK 二次开发 指令打印
- java中的守护线的应用_JVM中的守护线程示例详解
- 微信小程序-弹出自定义对话框
- FPGA时序约束建立时间与保持时间概念
- 程序界搬砖工教你在Linux系统下如何使用Python虚拟环境(干货篇)