Android仿银行客户签名并且保存签名的截图文件并命名为本地时间
首先需要一个自定义view用来签字使用,可以修改颜色和画笔的粗细,可以擦拭重新画
packagecom.android.tcm.view;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Path;
importandroid.graphics.PorterDuff.Mode;
importandroid.graphics.PorterDuffXfermode;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.View;
publicclassSignViewextendsView{
privatePaintpaint;
privateCanvascacheCanvas;
privateBitmapcachebBitmap;
privatePathpath;
staticfinalintBACKGROUND_COLOR=Color.WHITE;
staticfinalintBRUSH_COLOR=Color.BLACK;
publicSignView(Contextcontext,AttributeSetattrs,intdefStyleAttr){
super(context,attrs,defStyleAttr);
//initView(context);
//TODOAuto-generatedconstructorstub
}
publicSignView(Contextcontext,AttributeSetattrs){
super(context,attrs);
//initView(context);
//TODOAuto-generatedconstructorstub
}
publicSignView(Contextcontext){
super(context);
//initView(context);
//TODOAuto-generatedconstructorstub
}
publicvoidinitView(Contextcontext){
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
//TODOAuto-generatedmethodstub
super.onMeasure(widthMeasureSpec,heightMeasureSpec);
paint=newPaint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
path=newPath();
cachebBitmap=Bitmap.createBitmap(
MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec),Config.ARGB_8888);
cacheCanvas=newCanvas(cachebBitmap);
cacheCanvas.drawColor(Color.TRANSPARENT);
}
publicBitmapgetCachebBitmap(){
returncachebBitmap;
}
publicvoidclear(){
if(cacheCanvas!=null){
paint.setXfermode(newPorterDuffXfermode(Mode.CLEAR));
cacheCanvas.drawPaint(paint);
paint=newPaint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
invalidate();
}
}
@Override
protectedvoidonDraw(Canvascanvas){
//canvas.drawColor(BRUSH_COLOR);
canvas.drawBitmap(cachebBitmap,0,0,null);
canvas.drawPath(path,paint);
}
@Override
protectedvoidonSizeChanged(intw,inth,intoldw,intoldh){
intcurW=cachebBitmap!=null?cachebBitmap.getWidth():0;
intcurH=cachebBitmap!=null?cachebBitmap.getHeight():0;
if(curW>=w&&curH>=h){
return;
}
if(curW
布局代码如下
主函数代码,用于获取截图(id:rl)的,并且把文件保存到本地(文件夹TVC下文件命名为当前时间如2017071310:31:31.jpg)
packagecom.android.tcm.activity;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.os.Environment;
importandroid.view.View;
importandroid.widget.RelativeLayout;
importandroid.widget.TextView;
importcom.android.tcm.R;
importcom.android.tcm.view.SignView;
importjava.io.ByteArrayOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
/**
*Createdbysf.
*/
publicclassSignActivityextendsActivity{
privateRelativeLayoutrl;
privateSignViewmView;
privateTextViewcommit,clear;
privateBitmapmSignBitmap;
privateStringsignPath;
privatelongtime;
privateStringfileName;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign);
initView();
}
publicvoidinitView(){
mView=(SignView)findViewById(R.id.signView);
commit=(TextView)findViewById(R.id.tv_commit);
clear=(TextView)findViewById(R.id.tv_clear);
rl=(RelativeLayout)findViewById(R.id.rl);
commit.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//commit.getDrawingCache();//获取控件的截图
//saveSign(BitmapUtil.myShot(SignActivity.this));
rl.setDrawingCacheEnabled(true);
saveSign(rl.getDrawingCache());
rl.setDrawingCacheEnabled(false);
}
});
clear.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
mView.clear();
}
});
}
/**
*signPath是图片保存路径
*
*@parambit
*/
publicvoidsaveSign(Bitmapbit){
time=System.currentTimeMillis();
fileName=getDateTimeFromMillisecond(time);
mSignBitmap=bit;
signPath=createFile();
}
/**
*@return
*/
privateStringcreateFile(){
ByteArrayOutputStreambaos=null;
String_path=null;
try{
Stringsign_dir=Environment.getExternalStorageDirectory()
.getPath()+"/"+"TCM"+"/";
Filedir=newFile(sign_dir);
if(!dir.exists()){
dir.mkdirs();
}
_path=sign_dir+fileName+".jpg";
baos=newByteArrayOutputStream();
mSignBitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);
byte[]photoBytes=baos.toByteArray();
if(photoBytes!=null){
newFileOutputStream(newFile(_path)).write(photoBytes);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(baos!=null)
baos.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
return_path;
}
@Override
protectedvoidonDestroy(){
//TODOAuto-generatedmethodstub
super.onDestroy();
if(mSignBitmap!=null){
mSignBitmap.recycle();
}
}
/**
*将毫秒转化成固定格式的时间
*时间格式:yyyy-MM-ddHH:mm:ss
*
*@parammillisecond
*@return
*/
publicstaticStringgetDateTimeFromMillisecond(Longmillisecond){
SimpleDateFormatsimpleDateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Datedate=newDate(millisecond);
StringdateStr=simpleDateFormat.format(date);
returndateStr;
}
}
以上所述是小编给大家介绍的Android仿银行客户签名并且保存签名的截图文件并命名为本地时间,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!