做了wps相关 就想探讨一下那里面的手写签名是怎么实现的

package xuganwen.handwrite;
import android.annotation.SuppressLint;
import android.content.Context;
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;
@SuppressLint({ "ClickableViewAccessibility", "DrawAllocation" })
public class HandWriteView extends View {
 private Paint paint;
 private Path path;
 private Bitmap cachebBitmap;
 private Canvas cacheCanvas;
 public HandWriteView(Context context) {
  this(context, null);
 }
 public HandWriteView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  paint = new Paint();
  paint.setAntiAlias(true);
  paint.setStrokeWidth(3);
  paint.setStyle(Paint.Style.STROKE);
  paint.setColor(Color.BLACK);
  path = new Path();
  cachebBitmap = Bitmap.createBitmap(1080, 1800, Config.ARGB_8888);
  cacheCanvas = new Canvas(cachebBitmap);
  cacheCanvas.drawColor(Color.WHITE);
 }
 @Override
 protected void onDraw(Canvas canvas) {
  Paint bmpPaint=new Paint();
  canvas.drawBitmap(cachebBitmap, 0, 0, bmpPaint);
  canvas.drawPath(path, paint);
 }
 
 float cur_x;
 float 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;
  default:
   break;
  }
  
  invalidate();
  return true;
 }
}



Activity 
package xuganwen.handwrite;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
public class MainActivity extends Activity implements OnclickListener {
 private Button btn;
 private HandWriteView handWriteView;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  btn=(Button)findViewById(R.id.btn);
  handWriteView=(HandWriteView)findViewById(R.id.handWriteView);
 btn.setOnclickListener(this); 
 }

点击按钮生成图片并存储 
@Override
 public void onClick(View v) {
    ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
   handWriteView.cachebBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
  byte[] buffer=outputStream.toByteArray();
if(buffer!=null){
 try {
 File file=new File(Environment.getExternalStorageDirectory(), "sign.jpg");
file.createNewFile();
 new FileOutputStream(file).write(buffer);
   } catch (Exception e) {

    e.printStackTrace();

   }

  }

  Toast.makeText(this, "生成图片文件", Toast.LENGTH_SHORT).show();

 } 
} 
 


布局文件 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     >
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="打开画板" />
    
    <xuganwen.handwrite.HandWriteView 
        android:id="@+id/handWriteView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
        />
</LinearLayout>

你可能感兴趣的:(自定义控件,手写签名)