`
梦想家dream
  • 浏览: 61675 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

Android自定义控件--2(数字签名)

阅读更多
客户信息交互用到的一个数字签名,保存的是bmp图片(我那会在PAD端保存成图片比较容易,关键是上传到PC端问题大了 用USB-HID方式传总是出错,因为每个包我发送255字节,最后一个包发错了,就在PC上保存不成完整的图片,尝试过用串口传输,但是速度较慢,容易丢包)以下是源码:
/**
 * 
 */
package com.hacheng.view;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import com.hacheng.ttsdemo.R;


/**
 * @author:xj
 * @version:v1.0
 * @company:
 */
public class PaintView extends View {

	private static final float DEFAULT_BLOD_WIDTH = 4.0f;
	private static final int DEFAULT_COLOR = Color.BLACK;

	private List<Float> points = new ArrayList<Float>();

	private Paint paint; // 画笔
	private Canvas cacheCanvas;// 画布
	private Bitmap cachebBitmap;

	private Path path;// 轨迹
	private float curX;
	private float curY;

	private float blodWidth = DEFAULT_BLOD_WIDTH;
	private int color = DEFAULT_COLOR;

	public Bitmap getCachebBitmap() {
		return cachebBitmap;
	}

	public PaintView(Context context, AttributeSet attrs) {
		super(context, attrs);
		TypedArray typedArray = context.obtainStyledAttributes(attrs,
				R.styleable.paintView);
		blodWidth = typedArray.getFloat(R.styleable.paintView_blodWidth,
				DEFAULT_BLOD_WIDTH);
		color = typedArray.getColor(R.styleable.paintView_color, DEFAULT_COLOR);
		init();
	}

	private void init() {
		paint = new Paint();
		paint.setAntiAlias(true);
		paint.setStrokeWidth(blodWidth);
		paint.setColor(color);
		paint.setStyle(Paint.Style.STROKE);
		path = new Path();
	}

	public void clear() {
		if (cacheCanvas != null) {
			paint.setColor(Color.BLUE);
			cacheCanvas.drawPaint(paint);
			paint.setColor(Color.BLACK);
			cacheCanvas.drawColor(Color.WHITE);
			invalidate();
		}
	}

	@Override
	protected void onDraw(Canvas canvas) {
		if (cachebBitmap == null || cacheCanvas == null) {
			cachebBitmap = Bitmap.createBitmap(this.getWidth(),
					this.getHeight(), Config.ARGB_8888);
			cacheCanvas = new Canvas(cachebBitmap);
			cacheCanvas.drawColor(Color.WHITE);
		}
		canvas.drawBitmap(cachebBitmap, 0, 0, null);
		canvas.drawPath(path, paint);
	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {

		int curW = cachebBitmap != null ? cachebBitmap.getWidth() : 0;
		int curH = cachebBitmap != null ? cachebBitmap.getHeight() : 0;
		if (curW >= w && curH >= h) {
			return;
		}

		if (curW < w) {
			curW = w;
		}
		if (curH < h) {
			curH = h;
		}
		Bitmap newBitmap = Bitmap.createBitmap(curW, curH,
				Bitmap.Config.ARGB_8888);
		Canvas newCanvas = new Canvas();
		newCanvas.setBitmap(newBitmap);
		if (cachebBitmap != null) {
			newCanvas.drawBitmap(cachebBitmap, 0, 0, null);
		}
		cachebBitmap = newBitmap;
		cacheCanvas = newCanvas;
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {

		float x = event.getX();
		float y = event.getY();

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			curX = x;
			curY = y;
			points.add(x);
			points.add(y);
			path.moveTo(curX, curY);
			break;

		case MotionEvent.ACTION_MOVE:
			path.quadTo(curX, curY, x, y);
			curX = x;
			curY = y;
			points.add(x);
			points.add(y);
			break;

		case MotionEvent.ACTION_UP:
			cacheCanvas.drawPath(path, paint);
			path.reset();
			break;
		default:
			break;
		}

		invalidate();

		return true;
	}

	public List<Float> getPoints() {
		return points;
	}
}

源码下载请戳这里:
分享到:
评论

相关推荐

    安卓手绘图片处理画板相关-Android签名控件手写自定义的控件.rar

    Android 签名 控件 手写 自定义的控件.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    Android自定义View之签名板

    Android自定义View之签名板,在控件上用触控写出名字,提取jpg格式文件并保存

    android开发入门与实战(下)

    第2章 工欲善其事 必先利其器——搭建Android开发环境 2.1 开发Android应用前的准备 2.1.1 Android开发系统要求 2.1.2 Android软件开发包 2.1.3 其他注意事项 2.2 Windows开发环境搭建 2.2.1 JDK、Eclipse、Android...

    Android 自定义View手写签名并保存图片功能

    自定义View——支持设置画笔颜色,画笔宽度,画板颜色,清除画板,检查是否有签名,保存画板图片(复制粘贴可直接使用) /** * Created by YyyyQ on 2020/3/5. * 电子签名 */ public class SignatureView ...

    自己平时做的android相关的总结

    自定义控件时要注意的问题。 obtainMessage 的作用: FrameLayout 需要注意的地方: EditText 禁止弹出按键盘: 获取控件屏幕位置和窗口位置: 为什么MyAdapater的getView没有被调用 XmlSerializer使用总结: ...

    精通ANDROID 3(中文版)1/2

    12.2.2 理解数字签名:场景2  12.2.3 一种理解数字签名的模式  12.2.4 数字签名执行方式  12.2.5 签名过程的影响  12.3 在包之间共享数据  12.3.1 共享用户ID的性质  12.3.2 共享数据的代码模式  12.4...

    精通Android 3 (中文版)2/2

    12.2.2 理解数字签名:场景2  12.2.3 一种理解数字签名的模式  12.2.4 数字签名执行方式  12.2.5 签名过程的影响  12.3 在包之间共享数据  12.3.1 共享用户ID的性质  12.3.2 共享数据的代码模式  12.4...

    Android开发资料合集-World版!

    2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 2.1.4、Activity 的跳转(含Bundle传值) 17 2.1.5.Actvity 堆栈 18 2.1.6、Intent对象调用...

    android手机安全卫士

    1.整体项目采用MVC框架,是对android知识点的综合应用,用到的技术有 (activity,service,broadcast,content provider,Notification , 数据库,自定义title,自定义控件,自定义toast,widget,aidl进程间通讯, javascript和...

    Android编程入门很简单.(清华出版.王勇).part2

    书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第2部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现...

    Android-StickerView:支持缩放和拖动的贴纸视图。 通常用于将位图标记到另一个。 例如:pdf

    用途:可用于pdf签名的操作控件 安装 Gradle allprojects { repositories { ... maven { url ' https://jitpack.io ' } } } implementation ' com.github.LightSun:Android-StickerView:&lt;see&gt; ' 自定义...

    Android编程入门很简单.(清华出版.王勇).part1

    书名:《Android编程入门很简单》(清华大学出版社.王勇)。 压缩打包成2部分,这是第1部分。 本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现...

    android开发秘籍

    11.1 android 的自定义视图 232 11.2 android 的原生组件 238 11.3 android 的安全机制 241 11.4 android 的进程间通信 242 11.5 android 的备份管理器 247 11.5.1 秘诀95:备份运行时数据 247 11.5.2 秘诀96:...

    android开发实例大全_王东华

    实例040: 使用自定义控件在屏幕中绘 制一条虚线 104 实例041: 在屏幕中实现手风琴效果 106 第3章 自动化服务实例集锦 109 实例042: 自动获取手机屏幕的分辨率 109 实例043: 自动获取手机电池的剩余电量 112 ...

    Java版水果管理系统源码-Android_MobiCop:手机卫士

    数据库,自定义title,自定义控件,自定义toast、widget等。 1.1.1 主界面 手机卫士项目有很多界面,当用户通过点击应用图标打开应用时,通常第一个呈现给我们的是一个启动界面,我们这里称为Splash界面(该界面的...

    金山卫士学习第一天源代码

    黑马程序员Android版金山卫士学习第一天源代码,可以参考代码学习一些小功能的实现。知识点:1、项目的代码组织结构 2、PackageManager 获取应用程序的版本号;...14、自定义组合控件 实现关闭自动更新;

    Android 开发技巧

    2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 2.1.4、Activity 的跳转(含Bundle传值) 17 2.1.5.Actvity 堆栈 18 2.1.6、Intent对象调用...

    AndroidProject案例集合

    作者AndroidHJS,源码AndroidProject,简单说几句 敲这个项目也是一时兴起,但是在敲这个项目过程,发现越敲越有劲。可以把自己在CSDN,掘金,干货集中营看到酷炫的效果运用到这个项目,有时候我也可以通过这个项目去...

Global site tag (gtag.js) - Google Analytics