android涂鸦板保存功能,android实现涂鸦,保存涂鸦后的图片,清屏

自定义view的类,代码如下:

[html]

package com.xy.tuya;

import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Paint.Style;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.util.Log;

import android.view.MotionEvent;

import android.view.View;

public class MyView extends View {

private Paint paint = null;

private Bitmap originalBitmap = null;

private Bitmap new1Bitmap = null;

private Bitmap new2Bitmap = null;

private float clickX = 0, clickY = 0;

private float startX = 0, startY = 0;

private boolean isMove = true;

private boolean isClear = false;

private int color = Color.GREEN;

private float strokeWidth = 2.0f;

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

originalBitmap = BitmapFactory.decodeResource(getResources(),

R.drawable.a1).copy(Bitmap.Config.ARGB_8888, true);

new1Bitmap = Bitmap.createBitmap(originalBitmap);

setDrawingCacheEnabled(true);

Log.i("RG", "new1Bitmap--->>>" + new1Bitmap);

}

public void clear() {

isClear = true;

new2Bitmap = Bitmap.createBitmap(originalBitmap);

invalidate();

}

Bitmap saveImage = null;

public Bitmap saveImage() {

if (saveImage == null) {

return null;

}

return saveImage;

}

public void setImge() {

saveImage = null;

}

public void setstyle(float strokeWidth) {

this.strokeWidth = strokeWidth;

}

Handler handler1;

@SuppressLint("DrawAllocation")

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

canvas.drawBitmap(HandWriting(new1Bitmap), 0, 0, null);

handler1 = new Handler() {

@Override

public void handleMessage(Message msg) {

Log.i("RG", "--------------------");

int what = msg.what;

if (what == 2) {

saveImage = Bitmap.createBitmap(HandWriting(new1Bitmap));

Message msg1 = new Message();

msg1 = Message.obtain(MainActivity.hh, 3);

MainActivity.hh.sendMessage(msg1);

}

super.handleMessage(msg);

}

};

}

@SuppressLint("HandlerLeak")

Handler handler;

public Bitmap HandWriting(Bitmap originalBitmap) {

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

int what = msg.what;

if (what == 1) {

startX = clickX;

startY = clickY;

}

super.handleMessage(msg);

}

};

Canvas canvas = null;

if (isClear) {

canvas = new Canvas(new2Bitmap);

Log.i("RG", "canvas ");

} else {

canvas = new Canvas(originalBitmap);

}

paint = new Paint();

paint.setStyle(Style.STROKE);

paint.setAntiAlias(true);

paint.setColor(color);

paint.setStrokeWidth(strokeWidth);

Log.i("RG", "startX-->>>>" + startX);

Log.i("RG", "startY-->>>>" + startY);

if (isMove) {

canvas.drawLine(startX, startY, clickX, clickY, paint);

}

if (isClear) {

return new2Bitmap;

}

return originalBitmap;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

Message msg = new Message();

msg = Message.obtain(handler, 1);

handler.sendMessage(msg);

clickX = event.getX();

clickY = event.getY();

if (event.getAction() == MotionEvent.ACTION_DOWN) {

isMove = false;

invalidate();

return true;

} else if (event.getAction() == MotionEvent.ACTION_MOVE) {

isMove = true;

invalidate();

return true;

}

return super.onTouchEvent(event);

}

}

mainactiviry类,代码如下:

[html]

package com.xy.tuya;

import android.opengl.Visibility;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

import android.support.v4.app.NavUtils;

public class MainActivity extends Activity {

/** Called when the activity is first created. */

private MyView handWrite = null;

private Button clear = null;

private Button save = null;

private ImageView saveImage = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

handWrite = (MyView) findViewById(R.id.handwriteview);

save = (Button) findViewById(R.id.save);

saveImage = (ImageView) findViewById(R.id.savep_w_picpath);

clear = (Button) findViewById(R.id.clear);

clear.setOnClickListener(new clearListener());

save.setOnClickListener(new saveListener());

handerl();

}

private class clearListener implements OnClickListener {

public void onClick(View v) {

handWrite.clear();

}

}

static Handler hh;

public void handerl() {

hh = new Handler() {

@Override

public void handleMessage(Message msg) {

int what = msg.what;

if (what == 3) {

saveImage.setVisibility(View.VISIBLE);

saveImage.setImageBitmap(handWrite.saveImage());

handWrite.setImge();

}

super.handleMessage(msg);

}

};

}

private class saveListener implements OnClickListener {

@Override

public void onClick(View v) {

Message msg = new Message();

msg = Message.obtain(handWrite.handler1, 2);

handWrite.handler1.sendMessage(msg);

if (handWrite.saveImage() != null) {

Log.i("RG", "111111111111111111111");

} else {

saveImage.setVisibility(View.GONE);

}

}

}

}

xml布局代码如下:

[html]

< ?xml version="1.0" encoding="utf-8"?>

< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/handwriteview"

android:layout_width="fill_parent"

android:layout_height="300dp" />

android:layout_width="wrap_content"

android:layout_height="40dip"

android:orientation="horizontal" >

android:id="@+id/clear"

android:layout_width="50dp"

android:layout_height="wrap_content"

android:text="清屏" />

android:id="@+id/save"

android:layout_width="50dp"

android:layout_height="wrap_content"

android:text="保存" />

android:id="@+id/savep_w_picpath"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

< /LinearLayout>

下过图如下:

20120820103343605.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器与服务器响应流程-----(转)

一. 解析域名地址为IP地址 浏览器DNS缓存&#xff1a;以Chrome为例&#xff0c;在浏览器窗口中输入chrome://net-internals/#dns&#xff0c;就可以查看当前浏览器DNS缓存记录&#xff0c;chrome的DNS缓存过期时间还是比较短的&#xff0c;大约为1分钟。 本机DNS缓存&#xff1…

Pc-98 android,PC安卓多功能搞机助手3.98

V3.98版本更新日志&#xff1a;1.全新多设备检测机制&#xff0c;底层代码重写&#xff1b;2.新增支持检测安卓用户是否允许当前电脑调试设备&#xff1b;3.软件冻结#卸载中新增清除指定应用数据&#xff1b;4.小米线刷检测功能优化&#xff0c;修复之前版本不能正确识别设备是…

拼接路径的两种方式

//本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490669.html https://www.evernote.com/shard/s227/sh/1401e497-899e-4b04-9ff6-e1d9638e9f25/f6b722ed5cb2c5f603a9b242ee7fe230转载于:https://www.cnblogs.com/ChenYilong/p/3490669.html

android像素鸟,像素鸟Flappy Bird

Flappy Bird是最近非常热门的一款像素游戏&#xff0c;Flappy Bird 的游戏规则异常简单&#xff1a;和Frogmind Games的成名作品BADLAND类似&#xff0c;玩家只需要点击屏幕就可以操作游戏&#xff0c;控制角色通过各种障碍。看似简单的规则下是让人抓狂的游戏难度。首先&#…

Android是什么 之三手机之硬件形态

手机硬件形态  本节可能与Android无关&#xff0c;但是Android系统现在这个阶段更多的是移动终端形态的开发平台&#xff0c;本节给出了Android背后的工作-Android管理的硬件是什么&#xff0c;Android的本质就是要管理好这些硬件部分&#xff0c;为用户提供一个体验更好&…

品味性能之道十一:JAVA中switch和if性能比较

通常而言大家普遍的认知里switch case的效率高于if else。根据我的理解而言switch的查找类似于二叉树&#xff0c;if则是线性查找。按照此逻辑推理对于对比条件数目大于3时switch更优&#xff0c;并且对比条件数目越多时switch的优势越为明显。一、测试目的最近与开发同学对于前…

miniblink载入html,winform使用miniblink展示html(全屏)

【实例简介】使用miniblink 展示html的例子&#xff0c;miniblink基于chromium的浏览器控件【实例截图】点击下图中的百度&#xff0c;即可 实现全屏访问 百度网页 &#xff0c;如下图&#xff1a;其实是winform嵌入的这个网页&#xff0c;打开即是 全屏效果【核心代码】using …

html设置照片模糊效果,CSS如何实现照片模糊?

在开发网页时&#xff0c;照片模糊处理会经常被使用&#xff0c;比如当我们背景图的模糊&#xff0c;当我们不想背景图片过于突出影响美观时&#xff0c;就可以设置将照片模糊处理&#xff0c;突出文字部分。那么 CSS 如何实现照片模糊呢&#xff1f;这篇文章 w3cschool 小编告…

女生学计算机未来出路,计算机真的已经烂大街了吗,女生学计算机没出路吗?...

假的。先说第一个问题&#xff1a;情况是&#xff0c;现在程序员是很多&#xff0c;但多半是中低端程序员&#xff0c;高端程序员供不应求&#xff0c;薪资一涨再涨。现在的程序员门槛一高再高&#xff0c;就是为了淘汰掉那些半吊子的程序员。如果你是靠从网上复制粘贴代码的“…

这些快捷键要学会使用啊

史上最全苹果键盘及Xcode快捷键整理 它们分别是command、option、control、shift以及esc除了command键上有标志之外其余四个可以通过这四个键对比比较出来。 谢谢原文作者提供较详细的快捷键说明。 常用的Xcode快捷键&#xff0c;工欲善其事&#xff0c;必先利其器。mac的键盘和…

关机计算机专业,电脑关机后自动重启怎么回事

日常生活中&#xff0c;大部分的网友朋友们都碰到过电脑在正常使用时&#xff0c;突然电脑自动重启了&#xff0c;并且多次尝试强制关机都无效&#xff0c;令人费神。下面小编针对此问题的原因给出了几种方法&#xff0c;希望对大家有所帮助&#xff0c;快来看看吧&#xff01;…

计算机无法打开打印机ip端口,讲述Win10电脑上无法选择打印机端口的解决方法...

我们在Win10电脑上使用打印机&#xff0c;进行打印材料是很平常的一件事&#xff0c;但是有用户在Win10电脑上&#xff0c;操作打印机时&#xff0c;出现了打印机端口无法选择的问题&#xff0c;不知道该怎么办&#xff1f;如果打印机端口无法正常选择的话&#xff0c;就代表我…

计算机WIN7动态硬盘分区,win7硬盘分区教程

win7硬盘分区教程硬盘分区其实是对硬盘的一种格式化&#xff0c;进行了此步骤后才可以使用硬盘保存各种数据&#xff0c;下面是小编为大家详细介绍win7硬盘分区教程&#xff0c;欢迎大家阅读&#xff01;一、进入磁盘管理工具我们点击要对硬盘进行分区&#xff0c;我们首先得知…

计算机的alu的作用,算术逻辑运算单元(ALU)的基本功能是什么 – 手机爱问

2004-12-28解释定点运算器的功能和组成部件解释定点算器包括ALU\阵列乘除器\寄存器\多路开关\三态缓冲器\数据总线等逻辑部件。运算器的设计,主要是围绕ALU和寄存器同数据总线之间如何传送操作数和运算结果进行的。在决定方案时,需要考虑数据传送的方便性和操作速度,在微型机和…

笔记本上的小键盘计算机怎样用,笔记本数字小键盘不能用怎么办【解决方法】...

许多笔记本键盘中都会携带一个小键盘&#xff0c;与台式电脑的键盘大小差不多&#xff0c;小键盘上面标注着阿拉伯数字0到9&#xff0c;非常适合会计行业的人们使用。小键盘可以帮助人们快速地将数字敲打出来&#xff0c;使用起来极为方便。要知道&#xff0c;大键盘属于输入设…

批量Append

GIS数据是按照图幅号组织的&#xff0c;现需要每个单独的系统数据进行拼接。 以下是批量追加代码&#xff1a; # --------------------------------------------------------------------------- # Append.py # Created on: 2013-01-21 10:25:22.00000 # (generated by ArcGI…

jquery ajax php中 css样式不显示,Chrome浏览器在Ajax同步调用之前不会显示Jquery的动态css Propery更改...

我有如下因素HTML节点&#xff1a;上的click事件会触发聊天对象的方法this.addUser function(trigger_node, id, is_silent, session, show_block_message){if(trigger_node){this.bk_trigger_node.html trigger_node.innerHTML;this.bk_trigger_node.cn trigger_node.class…

email协议与服务器关系,常见的邮件协议:POP3、IMAP、SMTP之间的区别和联系

POP3POP3是Post Office Protocol 3的简称&#xff0c;即邮局协议的第3个版本&#xff0c;是TCP/IP协议族中的一员&#xff0c;主要用于支持使用客户端远程管理在服务器上的电子邮件。POP3是因特网电子邮件的第一个离线协议标准&#xff0c;允许用户从服务器上把邮件存储到本地主…

php 连接mssql

以前用的都是mysql&#xff0c;今天突然想用下mssql&#xff0c;起先用的是sql server200. 第一种方法 打开mssql.dll拓展。然后把mssql.secure_connection off改为on 使用mssql拓展。类似于mysql拓展库 $connmssql_connect((local),sa,); if(!$conn){ //die(mssql_error()); …

2013年未之wpf项目乱述

不知识为何现已很少在网上发帖,貌似人生的方向已经看的七七八八.要么用心工作,要么自主创业.无论怎么样,对于现在的我来说都是一种淡定的选择。作为一个c#程序员&#xff0c;今年下半年开始使用wpf&#xff0c;更觉得wpf将来肯定会是win 客户端上的首选技术。 今年在公司共用wp…