android上的一个签名功能,先上效果图


SignActivity.java

package com.cool.hello.sign;import android.Manifest;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.os.Environment;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Toast;import com.cool.hello.R;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;import java.security.Permission;public class SignActivity extends AppCompatActivity {    private TouchView mTouchView;    private Bitmap bitmap;    String imagePath;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_sign);        initView();        File externalFilesDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);        imagePath = externalFilesDir.getAbsolutePath();    }    private void initView() {        mTouchView = (TouchView) findViewById(R.id.touchView);    }    ////////////////////////////////////////////////////////////////////////////    /////////////////////////event handler//////////////////////////////////////    /**     * 保存     * @param view     */    public void save(View view){        bitmap = mTouchView.getBitmap();        if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){            saveToSdCard();        }else {            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);        }    }    private void saveToSdCard() {        File file = new File(imagePath + File.separator + "sign.jpg");        try {            FileOutputStream fileOutputStream = new FileOutputStream(file);            bitmap.compress(Bitmap.CompressFormat.JPEG,70,fileOutputStream);            Toast.makeText(this,"保存成功",Toast.LENGTH_SHORT).show();        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }    /**     * 清空     * @param view     */    public void clear(View view){        mTouchView.clear();    }    /**     * 取消     * @param view     */    public void cancel(View view){        mTouchView.clear();        finish();    }    @Override    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {        super.onRequestPermissionsResult(requestCode, permissions, grantResults);        if(grantResults[0] == PackageManager.PERMISSION_GRANTED){            saveToSdCard();        }else {            Toast.makeText(this,"授权失败",Toast.LENGTH_SHORT).show();        }    }    ////////////////////////////////////////////////////////////////////////////}
activity_sign.xml

<?xml version="1.0" encoding="utf-8"?>                

TouchView.java

package com.cool.hello.sign;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.graphics.PorterDuff;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by cool on 2017/2/7. */public class TouchView extends View {    private int mWidth;//屏幕的宽    private int mHight;//屏幕的高    private Paint mPaint;    private Path mPath;    private Bitmap mBitmap;    private Canvas mCanvas;    public TouchView(Context context) {        this(context, null);    }    public TouchView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public TouchView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        init();    }    private void init() {        mPaint = new Paint();        mPaint.setAntiAlias(true); // 去除锯齿        mPaint.setStrokeWidth(5);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setColor(Color.BLACK);        mPath = new Path();    }    @Override    protected void onDraw(Canvas canvas) {        canvas.drawBitmap(mBitmap,0,0,null);        canvas.drawPath(mPath,mPaint);    }    float startX;    float startY;    @Override    public boolean onTouchEvent(MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                startX = event.getX();                startY = event.getY();                mPath.moveTo(startX,startY);                break;            case MotionEvent.ACTION_MOVE:                float currentX = event.getX();                float currentY = event.getY();                mPath.lineTo(currentX,currentY);                break;            case MotionEvent.ACTION_UP:                mCanvas.drawPath(mPath,mPaint);                break;        }        invalidate();        return true;    }    public Bitmap getBitmap(){        return mBitmap;    }    public void clear(){        if(mCanvas != null){            mPath.reset();            mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);            invalidate();        }    }    @Override    protected void onSizeChanged(int w, int h, int oldw, int oldh) {        super.onSizeChanged(w, h, oldw, oldh);        mWidth = w;        mHight = h;        mBitmap = Bitmap.createBitmap(mWidth, mHight, Bitmap.Config.ARGB_8888);        mCanvas = new Canvas(mBitmap);        mCanvas.drawColor(Color.WHITE);    }}


更多相关文章

  1. Android(安卓)ProgressDialog的使用
  2. Android屏幕尺寸、标题栏高度、状态栏高度、当前View尺寸
  3. 取消自动获取焦点(默认进来焦点到edittext),取消进入呼出软件盘
  4. Android平板大屏幕的设置
  5. Android(安卓)利用隐藏API实现屏幕亮度调节
  6. 第七章 Android(安卓)常见的UI基础控件 (三)
  7. Android平板大屏幕的设置
  8. 2012-7-17 固定屏幕显示模式Android: ScreenOrientation,全屏
  9. Android的SharedPreferences和PreferenceActivity用法

随机推荐

  1. Android(安卓)-- Button [ 学习笔记 一 ]
  2. Android(安卓)自定义加载view(菊花效果)
  3. android获取版本信息
  4. android获取短信state
  5. android 如何从sqlite读取数据到spinner
  6. Browsing Android(安卓)Source in Eclips
  7. Android(安卓)去掉底部虚拟导航栏
  8. android EditText 控件中加入图片(非背景
  9. Android调用系统功能获取当前经纬度
  10. 【Android】Activity全屏设置