画画板

#画画板(掌握)

>记录用户触摸事件的XY坐标,绘制直线

* 给ImageView设置触摸侦听,得到用户的触摸事件,并获知用户触摸ImageView的坐标

iv.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

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();

//用上次onTouch方法得到的坐标和本次得到的坐标绘制直线

canvas.drawLine(startX, startY, newX, newY, paint);

iv.setImageBitmap(copyBm);

startX = newX;

startY = newY;

break;

}

return true;

}

});

* 刷子效果,加粗画笔

paint.setStrokeWidth(8);

* 调色板,改变画笔颜色

paint.setColor(Color.GREEN);

* 保存图片至SD卡

FileOutputStream fos = null;

try {

fos = new FileOutputStream(new File("sdcard/dazuo.png"));

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//保存图片

copyBm.compress(CompressFormat.PNG, 100, fos);

* 系统每次收到SD卡就绪广播时,都会去遍历sd卡的所有文件和文件夹,把遍历到的所有多媒体文件都在MediaStore数据库保存一个索引,这个索引包含多媒体文件的文件名、路径、大小

* 图库每次打开时,并不会去遍历sd卡获取图片,而是通过内容提供者从MediaStore数据库中获取图片的信息,然后读取该图片

* 系统开机或者点击加载sd卡按钮时,系统会发送sd卡就绪广播,我们也可以手动发送就绪广播

Intent intent = new Intent();

intent.setAction(Intent.ACTION_MEDIA_MOUNTED);

intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));

sendBroadcast(intent);

源代码:

package com.itheima.paintboard;

 

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.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.graphics.Bitmap.CompressFormat;

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 int startX;

private int startY;

private Paint paint;

private Canvas canvas;

private ImageView iv;

private Bitmap bmCopy;

@Override

protected 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() {

//用户手指只要触摸屏幕,就会产生触摸事件

@Override

public 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);

 

//刷新,因为每次滑动绘画时,图片保存在缓存里,所以需要重新设置ImageView进行刷新到界面上

 

 

iv.setImageBitmap(bmCopy);

//把本此画线的终点设置为下一次画线的起点

startX = newX;

startY = newY;

break;

//手指抬起

case MotionEvent.ACTION_UP:

break;

 

}

//true表示告诉系统,这个触摸事件由iv处理

//false表示不处理该触摸事件,事件往上传递

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(8);

}

public void save(View v){

File file = new File("sdcard/dazuo.png");

FileOutputStream fos;

try {

fos = new FileOutputStream(file);

//把图片压缩到本地文件

bmCopy.compress(CompressFormat.PNG, 100, fos);

fos.close();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//手动发一个sd卡就绪广播

Intent intent = new Intent();

intent.setAction(Intent.ACTION_MEDIA_MOUNTED);

intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));

sendBroadcast(intent);

}

 

}

时间: 2024-10-12 21:42:06

画画板的相关文章

android96 内存创建图片副本,画画板

package com.itheima.copy; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; imp

2015年第一篇:Android 画画板

其实画画板这个东西,很多地方都用的到,比如:在qq里面有一个随手涂鸦的画画板,电脑里面画图工具,ps等,这些都是用到的画画板,今天我实现了一个小小的画画板,分享给大家,希望能对你们有所帮助. 1.原理分析:(很简单) 1.当用户触摸到屏幕的时候,开始画画 2.当用户移动的时候,画画的开始位置和结束位置用线连接起来 3.当用户手离开屏幕的时候,也就完成了画画 2.先上效果图: 3.示例源码 package com.zengtao.demo; import java.io.File; import

iOS 使用UIBezierPath类实现随手画画板

这篇文章介绍一下如何通过这个类实现一个简单的随手画画板的简单程序demo,功能包括:划线(可以调整线条粗细,颜色),撤销笔画,回撤笔画,清除画布,橡皮擦.当然也可以扩展其他的功能. 一.首先看看实现划线部分的关键代码吧! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 - (void) drawRect: (CGRect) rect {

iOS_24_画画板(含取色板)

终于效果例如以下: 一.简单说明 1.使用一个数组 strokesArr(笔画数组)记录全部笔画.数组中保存的是一个个的笔画字典,一个字典就是一个笔画.笔画字典中有三项:笔画的大小.颜色.pointsArrInOneStroke数组,(保存的是touch begin时的落笔点和touch move过程中经过的点) 2.绘制的时候,从strokesArr(笔画数组)里取出每个字典(一个字典就是一个笔画).依据字典中笔画的大小.颜色.笔画所经过的点坐标(pointsArrInOneStroke数组)

Android小应用-----画画板

public class MainActivity extends Activity { private ImageView iv; float startX = 0; float startY = 0; //获得一个可以被bitmap Bitmap bitmap = Bitmap.createBitmap(400, 400,Bitmap.Config.ARGB_8888); //创建画布 Canvas canvas = new Canvas(bitmap); //创建画笔 Paint pain

iOS_24_画画板

最终效果如下: 一.简单说明 1.使用一个数组 strokesArr(笔画数组)记录所有笔画,数组中保存的是一个个的笔画字典,一个字典就是一个笔画,笔画字典中有三项:笔画的大小.颜色.pointsArrInOneStroke数组,(保存的是touch begin时的落笔点和touch move过程中经过的点) 2.绘制的时候,从strokesArr(笔画数组)里取出每一个字典(一个字典就是一个笔画),根据字典中笔画的大小.颜色.笔画所经过的点坐标(pointsArrInOneStroke数组),

iOS开发-高级UI-小应用画画板

画画板1.搭建界面(3个按钮,1个View) 2.为重写touchesBegan:等方法,需要自定义一个View,新建一个View,名为NJView,然后在故事板将这个View的Class设置为NJView 3.在NJView.m中重写方法 //开始触摸-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ //1.获取手指对应UITouch对象 UITouch *touch = [touches anyObject]:

(素材源码)猫猫学IOS(三十四)UI之Quartz2D画画板的实现

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 源码:http://download.csdn.net/detail/u013357243/8666923 效果: 代码: NYView NYView.h // // NYView.h // 画画板 // // Created by apple on 15-5-6. // Copyright (c) 2015年 znycat.

canvas画画板

制作一个画画板,有清屏有橡皮擦有画笔可以换颜色 style样式 <head> <meta charset="UTF-8"> <title>画画板</title> <style> body{ background-color:#ccc; } .control-bar{ vertical-align:top; display:inline-block; } </style> </head> html结构 &