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,一经查实,立即删除!

相关文章

技术要求→物理安全→防盗窃和防破坏

一、要求内容a)应将主要设备放置在机房内&#xff1b;b)应将设备或主要部件进行固定&#xff0c;并设置明显的不易除去的标记&#xff1b;c)应将通信线缆铺设在隐蔽处&#xff0c;可铺设在地下或管道中&#xff1b;d)应对介质分类标识&#xff0c;存储在介质库或档案室中&#…

android nv21图片格式,Android -- 将NV21图像保存成JPEG

//保存一张照片String fileName "IMG_" String.valueOf(index) ".jpg"; //jpeg文件名定义File sdRoot Environment.getExternalStorageDirectory(); //系统路径String dir "/jpeg/"; //文件夹名File mkDir new File(sdRoot, dir);if (!mkD…

u-boot,linux,文件系统移植笔记1

今天把u-boot,linux,yaffs2文件系统的移植全部搞定了&#xff0c;在我的mini2440板子上跑起来了&#xff0c;呵呵&#xff0c;兴奋啊&#xff01;现在回头看看自己花了这么长时间所作的工作&#xff0c;结论就是&#xff0c;只要坚持下去就一定会成功的。 下面就把我移植过程中…

android限制安装包来源,Android系统设置settings应用学习(一)--允许未知来源应用安装...

settings&#xff0c;是Android系统应用--设置的源代码&#xff0c;包名称为&#xff1a;com.android.settings安全设置代码&#xff1a;SecuritySettings.java/** Copyright (C) 2007 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the…

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

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

android关键应用程序,Android应用程序的四个关键点

对于一个Android应用程序来说&#xff0c;是由四种关键构造块组织而成的&#xff0c;这四种构造块分别是&#xff1a;Activity、Intent Receiver、Service、Content Provider但是&#xff0c;并不是每一个Android应用程序都需要这四种构造块&#xff0c;这不是必须的&#xff0…

手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统(附源码+视频教程(第6节))...

一 本系列随笔概览及产生的背景 近阶段接到一些b/s类型的软件项目&#xff0c;但是团队成员之前大部分没有这方面的开发经验&#xff0c;于是自己选择了一套目前网上比较容易上手的开发框架&#xff08;FineUI&#xff09;&#xff0c;计划录制一套视频讲座&#xff0c;来讲解如…

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;为用户提供一个体验更好&…

Android CPU 深度睡眠,处理器的深度和深度睡眠状态之间的差异

深度睡眠(C3)和深度睡眠(C4)是用于描述移动平台电源管理的术语。电源管理就是通过将 CPU 置于不使用状态时休眠来延长电池续航时间。C3 深度睡眠和 C4 深度睡眠是 ACPI 电源管理状态。更深的睡眠源自 CPU 和芯片组交互的改进&#xff0c;以重定向 snoop 周期。CPU 的深度 C4 状…

品味性能之道十一: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 …

javax.imageio.IIOException: Unsupported Image Type

把图片的模式用ps从CMYK转为RGB就ok了。 CMYK也称作印刷色彩模式&#xff0c;是一种依靠反光的色彩模式&#xff0c;和RGB类似&#xff0c;CMY是3种印刷油墨名称的首字母&#xff1a;青色Cyan、品红色Magenta、黄色Yellow。而K取的是black最后一个字母&#xff0c;之所以不取首…

html 手机访问优化,移动端首屏优化

[TOC]## 页面加载为什么打开一个 H5 页面会有一长段白屏时间&#xff1f;因为它做了很多事情&#xff0c;大概是&#xff1a;~~~初始化 webview -> 请求页面 -> 下载数据 -> 解析HTML -> 请求 js/css 资源 -> dom 渲染 -> 解析 JS 执行 -> JS 请求数据 -&…

2014年10月末

迄今&#xff0c;我的第一个目标已达到。接下来就要为第二个目标做准备了&#xff0c;而且是长期&#xff0c;不可松懈的准备。大体上计划用10个月吧&#xff01; 2014年&#xff0c;10月末&#xff0c;到时给出一个结果&#xff01;转载于:https://www.cnblogs.com/zhangyabin…

html5 indexeddb 排序,html5 – 在IndexedDB中,有没有办法进行排序复合查询?

本回答中使用的术语“复合查询”是指在其WHERE子句中涉及多个条件的SQL SELECT语句。虽然indexedDB规范中没有提到这样的查询&#xff0c;但您可以通过创建一个包含一组属性名称的keypath的索引来近似复合查询的行为。这与创建索引时使用多条目标志完全无关。多条目标志调整ind…

Spark源码分析 -- SchedulableBuilder

SchedulableBuilder就是对Scheduleable tree的封装, 在Pool层面(中间节点), 完成对TaskSet的调度(FIFO, FAIR) 在TaskSetManager 层面(叶子节点), 完成对TaskSet中task的调度(locality)以及track(retry) TaskSetManager 用于封装TaskSet, 主要提供对单个TaskSet内部的tasks的t…

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

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