刚开始学Android不久,写一个画板来熟悉事件处理和图像,以及界面。
功能:选颜色,选形状,画创意图形,选线条粗细,橡皮功能,清空功能
样式:用到菜单

分两个类来写:
DrawingActivity:
选ImageView当画板,在画板上画显示东西,画图事件源是ImageView,加监听器OnTouchListener,清空功能事件源是Button,加监听器OnClickListener

// 获取事件源对象ImageViewImageView ivDrawing = (ImageView) this.findViewById(R.id.ivDrawing);Button clearbtn=(Button)this.findViewById(R.id.clearbtn);
// 实例化DrawListener事件处理类的对象(把当前activity传过去)dl = new DrawingListener(this);
// 给事件源设置触屏监听方法,指定事件处理类的对象dlivDrawing.setOnTouchListener(dl);clearbtn.setOnClickListener(dl);

加菜单:
1.在activity中的函数中添加对应menu

    //加载菜单@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.drawing, menu);//该页面会跳出该菜单return true;}

2.菜单的样子选项设置在menu.xml中设置,下面代码的效果如上图所示
让菜单显示出来:android:showAsAction=”always”
让菜单选项加上图标:android:icon=”@drawable/rect”

    <itemandroid:id="@+id/item_type"android:title="@string/type"android:showAsAction="always"><menu><itemandroid:id="@+id/type_line"android:title="@string/type_line"android:icon="@drawable/line"/><itemandroid:id="@+id/type_rect"android:title="@string/type_rect"android:icon="@drawable/rect"/><itemandroid:id="@+id/type_oval"android:title="@string/type_oval"android:icon="@drawable/oval"/></menu></item>

3.菜单按钮上面不用添加点击事件监听器这些,菜单是系统给的系统默认给定了响应方法,只需要重写就行,重写方法onOptionsItemSelected(MenuItem item),因为点击事件响应获取是点击了哪个按钮是在acivity中重写得知,但操作却是在listener中用,所以点击menu选项要把对应的按钮的id传给listener,所以要在该方法中传参给listener
在listener中得到参数后,比对是哪个id就进行哪个操作。

//重写菜单的点击事件方法public boolean onOptionsItemSelected(MenuItem item){//点的是菜单哪个选项//点击选项把对应的itemid传过去dl.setItemId(item.getItemId());return true;        }

DrawingListener
先用一个函数来获取acivity那边传来的itemid,通过选了菜单中哪些选项就进行哪些操作

    public void setItemId(int itemId) {switch (itemId) {// 颜色case R.id.color_red:paint.setColor(Color.RED);break;
。。。// 形状case R.id.type_line:type = "line";break;case R.id.type_oval:type = "oval";break;
。。。// 线条粗细case R.id.line_big:paint.setStrokeWidth(50);break;
。。。// 分型case R.id.shape_one:type = "shape_one";break;
。。。}}

现在就可以开始画了,
先在构造方法里实例化画笔对象

    public DrawingListener(DrawingActivity d) {da = d;// 实例化Paint画笔对象要放在前面,否则没法设置颜色paint = new Paint();}

在OnTouchListener的onTouch实现画图:
先实例化位图、canvas

    public boolean onTouch(View v, MotionEvent event) {if (bm == null) {ivDraw = (ImageView) v;// 创建一个和ImageView一样大小的32位真彩色位图对象。bm = Bitmap.createBitmap(v.getWidth(), v.getHeight(),Bitmap.Config.ARGB_8888);// 根据bm位图对象实例化一个Canvas对象canvas = new Canvas(bm);}

按下鼠标:获取起始点,

    int action = event.getAction();// 获取触屏的动作switch (action) {case MotionEvent.ACTION_DOWN:x1 = event.getX();y1 = event.getY();break;

颜色、细条粗细:在上面的获取itemid信息中就实现了。

case R.id.color_red:paint.setColor(Color.RED);break;
case R.id.line_big:paint.setStrokeWidth(50);break;

移动鼠标里写铅笔和橡皮:
铅笔:思路:鼠标一移动都画直线(橡皮功能与铅笔一样,橡皮相当于颜色为背景色的铅笔)

case MotionEvent.ACTION_MOVE:if (type.equals("pencil")) {x2 = event.getX();y2 = event.getY();canvas.drawLine(x1, y1, x2, y2, paint);x1 = event.getX();y1 = event.getY();// 将bm位图对象设置成ImageView要显示的图片ivDraw.setImageBitmap(bm);}break;

释放鼠标:画其他各种图形(拖动效果尚未实现)

case MotionEvent.ACTION_UP:if (type.equals("line")) {x2 = event.getX();y2 = event.getY();canvas.drawLine(x1, y1, x2, y2, paint);// 将bm位图对象设置成ImageView要显示的图片ivDraw.setImageBitmap(bm);} else if (type.equals("rect")) {x2 = event.getX();y2 = event.getY();paint.setStyle(Style.STROKE);// 空心矩形框canvas.drawRect(new RectF(x1, y1, x2, y2), paint);// 将bm位图对象设置成ImageView要显示的图片ivDraw.setImageBitmap(bm);} else if (type.equals("oval")) {x2 = event.getX();y2 = event.getY();paint.setStyle(Style.STROKE);// 空心椭圆canvas.drawOval(new RectF(x1, y1, x2, y2), paint);// 将bm位图对象设置成ImageView要显示的图片ivDraw.setImageBitmap(bm);}

清空功能:在onclicklistener的处理方法里实现

    @Overridepublic void onClick(View view) {//清空canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);ivDraw.setImageBitmap(bm);}

Android简易画板:相关推荐

  1. Android 简易画板

    用到的方法 画布Canvas 画笔Paint 路径Path 文件 File 位图 Bitmap 菜单 menu 创建一个Android项目,实现手绘功能的简易画板,并可以储存. activity_ma ...

  2. android简易计算器

    android简易计算器 说明:完成简易版计算器,能够实现基本的加.减.乘.除运算 图示: 布局文件 <?xml version="1.0" encoding="u ...

  3. android画板需求分析,基于Android的画板的设计与实现论文.doc

    基于Android的画板的设计与实现论文.doc 职场大变样社区( . zcdby. com):下载毕业设计成品全套资料,全部50元以下 毕业设计(论文)任务书 毕业设计(论文)题目: 基于Andro ...

  4. qt制作一个画板_Qt 一个简易画板实现(Graphics View).pdf

    Qt ⼀个简易画板的实现(Graphics View) Qt 学习之路(32): ⼀个简易画板的实现(Graphics View) 这⼀次将介绍如何使⽤ Graphics View 来实现前⾯所说的画 ...

  5. Android简易微信界面

    Android简易微信界面 专选课移动互联网开发的第一次作业,利用Android Studio进行了简易Android微信界面的搭建 完整项目代码 界面样式展示: 界面xml源码 主界面xml源码 & ...

  6. 基于QGraphicsView的简易画板EasyCanvas -- 第一版

    最近使用 QGraphicsView 做了个简易的画板 EasyCanvas ,界面效果如下: 具有如下功能: 画布设置 图元添加和修改 保存为图片 第二版已更新 基于QGraphicsView的简易 ...

  7. android简易计算器(两位数的加减乘除求余)

      该项目是两年前刚学android时,课堂上老师布置的一个作业, 要求是:能够实现两位数(正数或负数)的加减乘除以及求余的功能. 一.简易计算器界面展示 1.两位数的加法 2.两位数的减法 3.两位 ...

  8. Qt Creator实现简易画板代码解析【工具栏】【画板】

    演示效果 工具栏通常位于菜单栏的下方,上面存放着一些小按钮,如下图所示. 以下所有功能都是直接通过代码实现,而不是在设计模式下ui界面通过拖拽实现.当然,它是可以用拖拽实现的. 引入图片资源 图片资源 ...

  9. react实现简易画板程序

    react实现简易画板程序 文章同时发布于:https://pengfeixc.com/blog/60d073bce97367196dce3efc. 在这之前,我写过一个vue版本的画板程序.最近因为 ...

最新文章

  1. How to Secure Your Smart Contracts: 6 Solidity Vulnerabilities and how to avoid them (Part 1)
  2. 初步学习Prometheus的微服务监控功能
  3. 交换机组播风暴_广播风暴的成因以及解决办法有哪些?
  4. linux 终端显示白底,mac终端使用Item2无法显示颜色的解决方法
  5. 程序设计习惯养成计划---一、方法规约设计
  6. 我给曾经暗恋的高中女同学,用Python实现了她飞机上刷抖音
  7. java 后加_java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别!其实大家只要记住一句话就可以了,前++是先自加再使...
  8. 自己做量化交易软件(38)小白量化实战11--双向高频马丁交易策略
  9. Windbg调试----Windbg入门
  10. [maya学习笔记(18)] 粒子系统 - 落叶纷飞
  11. 用python实现字符串数据的标签数字化
  12. 前端自检梳理——Vue.js项目实战开发
  13. 祝大家开工大吉,工作顺利。
  14. jQuery 从零开始学习 (三) 属性与css样式
  15. 推荐系统——(论文阅读笔记)YouTube的视频推荐系统
  16. 数美2022:不惧势,不却步,逐浪有为
  17. 大尺寸背光检测~Dalsa线阵相机资料
  18. 【读论文】Character-Level Language Modeling with Deeper Self-Attention(Vanilla Transformer)
  19. R数据分析:变量间的非线性关系,多项式,样条回归和可加模型
  20. 消除代码中的 if-else/switch-case的正确姿势

热门文章

  1. 移动端支付界面制作(小兔鲜项目)
  2. .Net Core中间件
  3. npm 查看包的所有版本号
  4. Hexo 主题配置 - Icarus
  5. PHP中布尔型类型的英文单词是 ( ),php数据类型之布尔(其实他就是中国易经)...
  6. taro-ui 的 AtInput标签的bug
  7. (转)Lucene中文分词图解
  8. 关于 varchar max的误区
  9. less加管道tail_第二天作业
  10. Linux配置免密登录单机和全分布