场景

实现手写签名并获取签名照片

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓气质_CSDN博客-C#,SpringBoot,架构之路领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、新建空白项目,修改其页面布局

2、布局文件activity_main.xml代码

​
<?xml version="1.0"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_sign"android:layout_width="match_parent"android:layout_height="0dp"android:layout_gravity="center"android:layout_marginBottom="3dp"android:layout_weight="1"android:background="#FFFFFF" /><FrameLayoutandroid:id="@+id/fl_view"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:background="@color/teal_200" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:drawable/bottom_bar"android:paddingTop="3dp"><Buttonandroid:id="@+id/btn_ok"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="确定"/><Buttonandroid:id="@+id/btn_clear"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="清除"/></LinearLayout>
</LinearLayout>​

3、修改MainActivity代码

package com.badao.handwrittensignature;import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {private ImageView imageSign;private SignatureView mView;@Override public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageSign = findViewById(R.id.iv_sign);FrameLayout frameLayout = findViewById(R.id.fl_view);mView = new SignatureView(this);frameLayout.addView(mView);mView.requestFocus();Button btnClear = findViewById(R.id.btn_clear);btnClear.setOnClickListener((v) -> {mView.clear();});Button btnOk = findViewById(R.id.btn_ok);btnOk.setOnClickListener((v) -> {Bitmap imageBitmap = mView.getCachebBitmap();imageSign.setImageBitmap(imageBitmap);});}/*** 自定义签名控件*/class SignatureView extends View {//画笔private Paint paint;//画布private Canvas cacheCanvas;//位图private Bitmap cachebBitmap;//图片保存路径private Path path;public Path getPath() {return path;}//位图缓存public Bitmap getCachebBitmap() {return cachebBitmap;}public SignatureView(Context context) {super(context);init();}/*** 初始化*/private void init() {//设置画笔paint = new Paint();paint.setAntiAlias(true);paint.setStrokeWidth(3);paint.setStyle(Paint.Style.STROKE);paint.setColor(Color.BLACK);path = new Path();//创建位图cachebBitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);//用自定义位图构建画布cacheCanvas = new Canvas(cachebBitmap);//设置画布为白色cacheCanvas.drawColor(Color.WHITE);}/*** 清除画板,重置画笔*/public void clear() {if (cacheCanvas != null) {paint.setColor(Color.WHITE);cacheCanvas.drawPaint(paint);paint.setColor(Color.BLACK);cacheCanvas.drawColor(Color.BLUE);invalidate();}}@Override protected void onDraw(Canvas canvas) {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;}private float cur_x, cur_y;@Override public boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN: {cur_x = x;cur_y = y;path.moveTo(cur_x, cur_y);break;}case MotionEvent.ACTION_MOVE: {path.quadTo(cur_x, cur_y, x, y);cur_x = x;cur_y = y;break;}case MotionEvent.ACTION_UP: {cacheCanvas.drawPath(path, paint);path.reset();break;}}invalidate();return true;}}
}

Android中通过自定义签名控件实现手写签名相关推荐

  1. 自定义View控件(2—手写实例代码)

    1. 步骤: + 1.自定义一个类继承于UIView + 2.在initWithFrame方法中添加子控件 + 3.在layoutSubviews中设置子控件的位置 + 4.提供一个属性保存外界传入的 ...

  2. 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)

    一.背景 在 如何在Android中实现一个全景图控件(一)中,介绍了项目的一些基本情况(有 demo 演示),如果项目对你有帮助,希望文章赏个赞,项目 star 一下. 项目地址:https://g ...

  3. Android中使用shape来定义控件的显示属性

    参见:  http://dev.10086.cn/cmdn/wiki/index.php?doc-view-6087.html  或者 http://kofi1122.blog.51cto.com/2 ...

  4. android简单的自定义涂鸦控件

    简单的自定义涂鸦控件,没有写自定义属性 java代码中找到view后直接setBitmap(Bitmap bitmap)后就可以使用了 提供清除方法clear() 保存可以参考另一篇view转bitm ...

  5. java 手写签名,signature java html5+ 手写签名 源码 Develop 238万源代码下载- www.pudn.com...

    文件名称: signature下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 491 KB 上传时间: 2013-08-03 下载次数: 17 提 供 者: 孙晨 ...

  6. 在钉钉上怎么手写_数码知识:钉钉手写签名如何设置开启手写签名教程

    如今使用IT数码设备的小伙伴们是越来越多了,那么IT数码设备当中是有很多小技巧的,这些技巧很多小伙伴一般都是不知道如何来实用的,就好比最近就有很多小伙伴们想要知道钉钉手写签名如何设置开启手写签名教程, ...

  7. Android 手机卫士--自定义组合控件构件布局结构

    由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. ...

  8. [原创]在ObjectDataSource中使用自定义Web控件提供查询参数

    微软的东西就是好用,不过各种细小问题也是不少的. 比如,在ObjectDataSourc中设定选择查询时,如果是带有参数的查询,则会弹出定义参数对话框. 这个对话框里可以选择用于查询的参数来源,如果是 ...

  9. html5 移动端手写签名,H5移动端项目实现手写签名功能 vue实现手写签名

    vue 移动端实现手写签名效果,功能很完美,保存时保存为base64格式. 刚好项目用到此功能,就网上找了一下,清理了无用代码,简单方便,因为项目中多个地方需要使用,所以我将它整理为组件,通过ref和 ...

最新文章

  1. 根据痛点分析制作软件
  2. Android Studio开发入门-引用jar及so文件
  3. centos6.5系统自带python2.6升级到python2.7
  4. java反射机制面试_java反射机制面试题及答案整理,java反射面试题
  5. LaTeX 1软件下载安装
  6. 【2023校招刷题】常见面试问题总结(一、EDA工具及IC整体设计流程篇)(随后续面试不断更新....)
  7. Q200 EX.查看写入和预计使用寿命
  8. 利用Python爬取小说(附源码)
  9. 多文档程序 两个menu框架_汇总9款优秀的开源小程序UI框架
  10. C语言之for循环与while循环
  11. conda安装rdkit包出现的问题
  12. 使用python编写彩色圆圈
  13. CSDN取消手机绑定
  14. DW01G系列电路是一款高精度的单节可充电锂电池的过充电和过放电保护电路ic
  15. linux下eeprom测试函数,Linux Kernel eisa_eeprom_read函数绕过安全检查漏洞
  16. 水-生命之源,喝水的讲究
  17. 一篇重新带你认识:C语言
  18. js输入两个数,求最小公倍数和最大公约数
  19. layDate 日期与时间组件
  20. CATV网发展方向—宽带商业网

热门文章

  1. PyQT4编程实例之小财务软件
  2. Java中方法签名signature、方法重载以及“两同两小一大”的方法覆盖(方法重写)总结
  3. 引号快捷键_就业有“位”来 能让你早下班的常用快捷键
  4. shiro登录认证过程讲解(转)
  5. springcloud ribbon retryTemplate操作流程分析
  6. 数组和链表的区别以及应用场景
  7. bat脚本交互输入_测评 | 不使用powershell运行 PowerShell 脚本的工具汇总
  8. GCC对C++标准的实现情况
  9. c 服务器文件是存在,客户端服务器在较大的文件的c文件传输问题
  10. qemu debug linux内核,qemu调试linux内核