今天完成一个画画板。

首先来个布局:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ImageViewandroid:id="@+id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentBottom="true"><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="红色"android:onClick="red"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="绿色"android:onClick="green"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="刷子"android:onClick="brush"/><Button android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="保存"android:onClick="save"/></LinearLayout>
</RelativeLayout>

可见,要分红绿色,而且还要保存最后画的图片。

看一下主活动代码:

package com.itydl.paintban;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;public class MainActivity extends Activity {private ImageView iv;int startX;int startY;private Canvas canvas;private Paint paint;private Bitmap bmCopy;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//加载画画板的背景图Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg);bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());paint = new Paint();canvas = new Canvas(bmCopy);//绘制canvas.drawBitmap(bmSrc, new Matrix(), paint);iv = (ImageView) findViewById(R.id.iv);iv.setImageBitmap(bmCopy);//设置触摸侦听iv.setOnTouchListener(new OnTouchListener() {//触摸屏幕时,触摸事件产生时,此方法调用@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction();switch (action) {//用户手指摸到屏幕case MotionEvent.ACTION_DOWN:startX = (int) event.getX();startY = (int) event.getY();break;//用户手指正在滑动case MotionEvent.ACTION_MOVE:int x = (int) event.getX();int y = (int) event.getY();canvas.drawLine(startX, startY, x, y, paint);//每次绘制完毕之后,本次绘制的结束坐标变成下一次绘制的初始坐标startX = x;startY = y;iv.setImageBitmap(bmCopy);break;//用户手指离开屏幕case MotionEvent.ACTION_UP:break;}//true:告诉系统,这个触摸事件由我来处理//false:告诉系统,这个触摸事件我不处理,这时系统会把触摸事件传递给imageview的父节点return true;}});}public void red(View v){paint.setColor(Color.RED);}public void green(View v){paint.setColor(Color.GREEN);}public void brush(View v){paint.setStrokeWidth(7);}public void save(View v){File file = new File("sdcard/dazuo.png");FileOutputStream fos = null;try {fos = new FileOutputStream(file);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}bmCopy.compress(CompressFormat.PNG, 100, fos);//发送sd卡就绪广播Intent intent = new Intent();intent.setAction(Intent.ACTION_MEDIA_MOUNTED);intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));sendBroadcast(intent);}
}

运行看一下结果:

画了个绿帽子,哈哈。欢迎关注本博客点击打开链接  http://blog.csdn.net/qq_32059827,每天花上5分钟,阅读一篇有趣的安卓小文哦。

Android简易实战教程--第二十四话《画画板》相关推荐

  1. Android简易实战教程--第五十四话《视差特效》

    查看更多进阶知识,可以关注我的公众号,微信搜索:Android小菜 这个简易实战教程系列专栏发现已经大半年没更新了啊,赶紧添点东西. 本文实现一个视差特效效果,动态效果如下: 代码十分简单,自定义Vi ...

  2. Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》

    一.ScrollView 由于手机屏幕的高度有限,当普通布局放不下现实和的内容时,ScrollView视图(滚动视图)就会派上用场,因为数据可以往下滚动显示. 二.HorizontalScrollVi ...

  3. Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》

    在之前的小案例中写过一篇使用HttpUrlConnection获取网络数据的例子.在OKhttp盛行的时代,当然要学会怎么使用它,本篇就对其基本使用做一个介绍,然后再使用它的接口回调的方式获取相同的数 ...

  4. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain;publ ...

  5. Android简易实战教程--第三十二话《使用Lrucache和NetworkImageView加载图片》

    转载本专栏每一篇博客请注明转载出处地址,尊重原创.此博客转载链接地址:小杨的博客    http://blog.csdn.net/qq_32059827/article/details/5279131 ...

  6. Android简易实战教程--第五话《开发一键锁屏应用》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...

  7. PS教程第二十四课:魔法棒

  8. Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)...

    Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程) 原文:Android项目实战(三十八):2017最新 将AndroidLibrary ...

  9. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

最新文章

  1. Hacked VisualSVN Server by PHP to allow user change password
  2. MongoDB的安装与使用
  3. html:(1) 登录界面
  4. Springboot项目启动:报错The last packet sent successfully to the server was 0 milliseconds ago
  5. 4步教你玩转可视化大屏设计|内附实际操作
  6. Maven项目出现web.xml is missing and 《failOnMissingWebXml》is set to true,已解决
  7. java 控制台输出到gui_java – 如何将类似窗口的“控制台”添加到GUI?
  8. Centos7安装整合Apache+PHP,安装nginx后nginx无法解析.php文件
  9. 第2.01节 发布版本vs源码编译
  10. 汽车芯片格局重构「众生相」,各路玩家「各怀心事」
  11. 我平时的一个学习方法
  12. 乐得瑞LDR6282B 支持双C口盲插便携显示器驱动板方案
  13. 海康球机时间同步配置
  14. 加班费计算(节假日、补班)
  15. 笔记-动物病理(4:适应与修复+缺氧)
  16. 让人春分日 哈工科教115166.弹珠游戏
  17. Python3《机器学习实战》学习笔记(三):决策树实战篇
  18. 计算当前日期是本年的第几周
  19. 计算机历史和未来课程,计算机课程作业,计算机与汽车结合的历史与未来ppt概要.ppt...
  20. 非对称密码体制(公钥密码体制)中最基础的思路——MOD的运算

热门文章

  1. Qui-MinPure主题V1.0版发布——免费WP纯文章主题
  2. MFashion Python 面试
  3. (12)使用depends-on
  4. java面试(二)--(1)EJB的几种类型(2)Hibernate的悲观锁和乐观锁(3) 二叉搜索树与双向链表
  5. matlab 大写变小写,matlab 修改文件夹下所有文件名大写为小写
  6. Affymetrix公司芯片类型和对应平台
  7. [附源码]SSM计算机毕业设计网上零食商城JAVA
  8. 【工业通讯】CAN基础内容详解(二)——物理层
  9. 怎样从spring官网下载jar包呢?
  10. VMware 其他主机硬件对象的状态报警(HPE DL380 Gen10)