2015年第一篇:Android 画画板

其实画画板这个东西,很多地方都用的到,比如:在qq里面有一个随手涂鸦的画画板,电脑里面画图工具,ps等,这些都是用到的画画板,今天我实现了一个小小的画画板,分享给大家,希望能对你们有所帮助。

1.原理分析:(很简单)

1.当用户触摸到屏幕的时候,开始画画

2.当用户移动的时候,画画的开始位置和结束位置用线连接起来

3.当用户手离开屏幕的时候,也就完成了画画

2.先上效果图:

3.示例源码

package com.zengtao.demo;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
	private Button bt_save;
	private ImageView iv;
	private Bitmap baseBitmap;
	private Canvas canvas;
	private Paint paint;
	private int startX;
	private int startY;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		iv = (ImageView) findViewById(R.id.iv);
		bt_save = (Button) findViewById(R.id.bt_save);
		initPaint(); // 初始化画笔

		baseBitmap = Bitmap.createBitmap(480, 640, Bitmap.Config.ARGB_8888); // 创建一个可以被修改的bitmap
		canvas = new Canvas(baseBitmap); // 创建一个画布
		canvas.drawColor(Color.WHITE);

		iv.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN: // 手势点下的时候
					System.out.println("手指点下");
					/*
					 * baseBitmap = Bitmap.createBitmap(iv.getWidth(),
					 * iv.getHeight(), Bitmap.Config.ARGB_8888); //
					 * 创建一个可以被修改的bitmap canvas = new Canvas(baseBitmap); //
					 * 创建一个画布 canvas.drawColor(Color.WHITE);
					 */
					// 获取落点的开始位置
					startX = (int) event.getX();
					startY = (int) event.getY();
					break;
				case MotionEvent.ACTION_MOVE: // 手势移动的时候
					System.out.println("手指移动");
					int stopX = (int) event.getX();
					int stopY = (int) event.getY();
					canvas.drawLine(startX, startY, stopX, stopY, paint);
					iv.setImageBitmap(baseBitmap);
					// 重新获取画笔的开始位置
					startX = (int) event.getX();
					startY = (int) event.getY();
					break;
				case MotionEvent.ACTION_UP: // 手势起来的时候
					break;
				}
				return true;
			}
		});

		bt_save.setOnClickListener(new OnClickListener() {

			@SuppressLint("ShowToast")
			@Override
			public void onClick(View v) {
				try {
					File file = new File(Environment
							.getExternalStorageDirectory(), System
							.currentTimeMillis() + ".jpg");
					OutputStream stream = new FileOutputStream(file);
					baseBitmap.compress(CompressFormat.JPEG, 100, stream);
					stream.close();
					Toast.makeText(MainActivity.this, "保存图片成功", 0).show();
				} catch (Exception e) {
					Toast.makeText(MainActivity.this, "保存图片失败", 0).show();
				}
			}
		});
	}

	private void initPaint() {
		paint = new Paint();
		paint.setStrokeWidth(5);
		paint.setColor(Color.GREEN);
	}
}

4.记得添加权限,写入sdk的权限

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

5.以上便完成了一个简单的画画板,大家也试一试吧,希望能对您有所帮助。

时间: 2024-10-08 10:27:48

2015年第一篇:Android 画画板的相关文章

老IT人-2015年第一篇文章--2月2龙抬头……--祭ChinaRen社区关闭3周年

2015年第一篇文章-2月2龙抬头-祭ChinaRen社区关闭3周年,Chinaren社区的'儿子'长大成人了,但--. (作者 冯青华  信庭嵌入式工作室(www.xteda.com)- CEOBlog:http://blog.csdn.net/fqheda ) <转载请注名来路>

2015元旦第一篇博文:Red5流媒体服务器搭建

今天是2015年的第一天,白天陪老婆孩子去BHG(华联)转了转,中午在九毛九吃了顿午饭,就这样过了元旦,虽然有点累,但是挺开心,北京今天的天气也比较给力,风和日丽,没有雾霾!现在是晚上十点,因为白天出去玩,老婆孩子有点累,现在已经熟睡,我不想就这样就结束2015的第一天,作为一个新的开始,我决定写2015年的第一篇博文.闲话少说,进入主题.流媒体这个概念在第一家公司就了解了,当时做一个Eleaning在线教育平台的时候,用Red5流媒体服务器技术,支持过视频模块的播放.下面就谈谈我对流媒体的认识

意犹未尽而来的第一篇Android 逆向

游戏:咕噜王国大冒险 平台:android 目标: 1. 去除乱七八糟提示(本篇目标) 2. 去除google弹窗 3. 破解“all stages” 破文开始: 1. 使用APKIDE反编译:搜索字符串“Problem setting up in-app”,看下图 于是来到下图 分析函数要注意:返回值:这里是V,即void;所以向下关注就应该能达到我们的目的,没必要向上关注:这个函数的功能: 拼接目标字符串,然后作为参数传递给待关注函数: 跟踪函数来到下图: 这个函数功能:使用java中的反射

2015开年第一篇

今天是大年初一,希望新的一年新的开始. 总结总喜欢从回忆开始.记得我是2010年3月份来到迅雷实习,到现在已经马上5年了.真是不短了,也应该认真总结一下了. 2010年大半年的时候我做后台开发.做随身盘上传模块. 2011年开始我转向Windows客户端开发,和小鑫做随身盘客户端.后来和雨佳做网盘用XLUE开发.直到2013年底. 2013年底我转到Mac组开发. 2013年10月份 我离职,到了Formax做回后台开发. 2014年先是做windows后台开发. 2014下半年做股票开发,主要

2015年第一篇 自律守则以及年度目标

1.工作日,每天晚上十一半点前睡觉. 2.每天用手机软件记录自己的消费情况. 3.每天下班后最少学习90分钟. 4.本年度博客随笔不下于50篇. 5.学会省钱,能不买的东西就不买. 6.少打游戏. 7.每个月往自己的中国银行卡里存上工资卡剩下的钱. 8.多运动,少吃饭.多喝水,少吃甜食和零食. 9.跳槽,成为一个合格的unity3d开发人员. 10.和现在的好友保持良好的关系.以及找到自己的另一半. 11.培养一个好的习惯.

淘宝(阿里巴巴)手机客户端开发日记第一篇 android 主框架搭建(三)

activity_main.xml 结构如下:<?xml version="1.0" encoding="utf-8"?> <!-- 采用线性布局,垂直平铺 --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:l

Three.js 第一篇:绘制一个静态的3D球体

第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地方呢?下面我就来一一列举 1.场景. 场景是什么,说得简单一点,场景就是一个canvas ,我们就是要在Canvas上面实现3D效果的画面而已.场景和容器,相机是息息相关的,我们就拿拍戏来说,假如我们需要演一个古装剧的撕逼场景,那么,我们需要的道具其中之一就是一个相机. 2.容器 就是承载球体的DI

Android基础学习第一篇—Project目录结构

写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正. 2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽. *************************************我只是分割线***************************************

android调用第三方库——第一篇 (转载)

转自:http://blog.csdn.net/jiuyueguang/article/details/9447245 版权声明:本文为博主原创文章,未经博主允许不得转载. 0:前言: 这两天一直在研究用android的jni调用第三方库,上网搜方法,但是都是泛泛而谈,没有demo,经过我几番折磨,写了n多的 helloword工程,总是不成功,工程名字也就由helloowrd转到shithelloword再转到fuckhelloword再转到 bitchhelloword再转到ganhello