`
梦想家dream
  • 浏览: 64204 次
  • 性别: 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自定义控件-温度控制旋转按钮.zip

    "Android自定义控件-温度控制旋转按钮.zip"是一个专为实现温度调节功能而设计的自定义控件示例。这个控件模拟了一个可以旋转的按钮,用户通过旋转来调整温度值,常见于空调或加热系统的用户界面中。 首先,`...

    自定义控件文本绘制

    在Android开发中,自定义控件是提升应用界面独特性和用户体验的重要手段。本文将深入探讨如何在自定义控件中进行文本绘制,包括对文字基线的理解、文字绘制的范围和区域设定,以及如何通过`drawText()`方法实现这一...

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

    本资源"安卓手绘图片处理画板相关-Android签名控件手写自定义的控件.rar"提供了一个针对这一需求的自定义控件实现。下面我们将深入探讨这个主题,讲解如何在Android中实现手绘图片处理和签名控件。 首先,自定义...

    android 自定义组合控件

    首先,自定义控件通常涉及到继承已有的Android View或ViewGroup类,并重写其关键方法,如onDraw()用于绘制视图,以及onMeasure()和onLayout()来处理测量和布局。开发者可能会覆盖这些方法来实现自己的逻辑,以达到...

    android自定义签名dialog

    本教程将深入探讨如何在Android应用中实现一个自定义签名Dialog。 首先,我们需要理解Dialog的基本概念。在Android中,Dialog是Activity的一个子类,用于显示一些临时信息或者需要用户进行简单交互的操作。自定义...

    android 签名控件

    在Android开发中,"android 签名控件"是一个常见的需求,特别是在移动应用中需要用户进行电子签名的场景,例如合同签署、订单确认等。这个控件允许用户通过触屏在屏幕上绘制签名,然后保存或展示这个签名。在描述中...

    Android-SignatureView一个在Android上的电子签名板能保存所签名的图片

    在项目【F1ReKing-SignatureView-1f0ddc2】中,我们可以找到这个自定义控件的具体源码实现。通过阅读和分析源码,开发者可以了解其内部的工作原理,例如如何处理触摸事件、如何绘制线条以及如何保存图片等。此外,...

    SignView自定义签到控件

    在IT行业中,自定义控件是提升应用用户体验和满足特定需求的重要手段。"SignView自定义签到控件"就是这样一个实例,它专为实现个性化签到功能而设计。通过这个控件,开发者可以轻松地在应用程序中集成签到功能,并...

    Android开发教程--经典

    Android使用XML来定义用户界面,包括控件和布局。你会学到线性布局、相对布局、网格布局等,以及如何使用ConstraintLayout实现响应式设计。 四、活动(Activity)与任务(Task) 活动是Android应用的基本单元,负责...

    Android 画板view控件

    画板View控件在Android中通常基于`View`或`SurfaceView`进行扩展,通过重写`onDraw()`方法来实现自定义绘图功能。在这个特定的Android签名画板module中,开发者可能已经封装了一些核心功能,如笔触颜色选择、粗细...

    android入门-课程介绍

    在数字化世界中,Android操作系统占据着移动设备市场的主导地位,因此学习Android开发成为许多技术爱好者和职业开发者的重要技能。本课程专为初学者设计,旨在帮助学员快速掌握Android应用开发的基本概念和技术,...

    Android应用源码之android个人消费记录软件-拖控件作品-IT计算机-毕业设计.zip

    2. **用户界面设计**:应用中的拖控件设计涉及到Android的布局管理器,如LinearLayout、RelativeLayout、ConstraintLayout等,通过这些布局可以实现组件的排列和对齐。此外,可能还运用了自定义View或者Draggable ...

    Android拨号界面

    2. 自定义UI:使用Android的布局和控件,开发者可以自由设计拨号界面的外观和交互,例如改变数字键盘的样式,添加自定义功能按钮。 3. 功能扩展:利用Android的权限系统,开发者可以增加额外的功能,如集成语音识别...

    C#开发Android应用实战-使用Mono for Android和.NET C#(PDF中文扫描版下载,吾乐吧软件站分享)

    3. **UI设计与布局**:通过C#讲解如何创建和管理Android用户界面,包括XML布局文件、控件使用、事件处理,以及如何实现动态布局和自定义视图。 4. **数据存储与网络通信**:介绍如何在Android应用中使用SQLite...

    android 中文简介-转

    Android应用的用户界面(UI)通常通过XML文件定义,这些文件描述了控件的排列方式和属性。Android提供了一系列的视图组件,如TextView、Button、ImageView等,开发者可以组合这些组件创建丰富的交互式界面。此外,还...

    Android手写签名

    在Android平台上,手写签名功能通常用于电子合同、表单填写等场景,为用户提供便捷的签名体验。这个名为"DrawDemo"的项目就是一个简单的实现这一功能的示例。接下来,我们将详细探讨Android手写签名的相关知识点。 ...

    Android 开发教程-中文版

    Android开发教程中文版是针对想要学习或提升Android应用开发技能的开发者所准备的一份详尽指南。这份教程是由官网的原始英文版本翻译而来,确保了内容的权威性和准确性。使用Android Studio作为主要的集成开发环境...

    Android代码-基于安卓的奇瑞汽车APP

    - 自定义控件:为了实现独特的功能或界面效果,可能需要自定义Android控件。 6. **安全性**: - 数据加密:保护用户数据安全,如使用SSL/TLS进行网络通信加密。 - 权限管理:根据需求申请Android权限,如访问...

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

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

Global site tag (gtag.js) - Google Analytics