效果图
![这里写图片描述](https://img-blog.csdn.net/20170419165518139?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU21hbGxfTGVl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代码
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private GestureOverlayView overlayview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
overlayview = (GestureOverlayView) findViewById(R.id.gestureoverlayview);
overlayview.setGestureStrokeWidth(8);
overlayview.setGestureColor(Color.GREEN);
overlayview.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay, final Gesture gesture) {
View view = getLayoutInflater().inflate(R.layout.dialog_save_gesture,null);
ImageView iv = (ImageView) view.findViewById(R.id.iv_geture);
final EditText et = (EditText) view.findViewById(R.id.et);
Bitmap bitmap = gesture.toBitmap(128, 128, 5, 0xffff0000);
iv.setImageBitmap(bitmap);
new AlertDialog.Builder(MainActivity.this).setView(view)
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).setPositiveButton("保存", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
File dir = new File(Environment.getExternalStorageDirectory(),"gesture");
if(!dir.exists()){
dir.mkdirs();
}
File file = new File(dir,"gestures");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
GestureLibrary gestureLibrary = GestureLibraries.fromFile(file);
gestureLibrary.addGesture(et.getText().toString(),gesture);
gestureLibrary.save();
}
}).show();
}
});
}
public void startSecond(View view){
Intent intent = new Intent(this,SecondActivity.class);
startActivity(intent);
}
}
public class SecondActivity extends AppCompatActivity {
private GestureLibrary gestureLibrary;
private GestureOverlayView overlayView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
File dir = new File(Environment.getExternalStorageDirectory(),"gesture");
File file = new File(dir,"gestures");
gestureLibrary = GestureLibraries.fromFile(file);
if(gestureLibrary.load()){
Toast.makeText(this,"加载成功",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this,"加载失败",Toast.LENGTH_SHORT).show();
}
overlayView = (GestureOverlayView) findViewById(R.id.gestureoverlayview);
overlayView.setGestureColor(Color.GREEN);
overlayView.setGestureStrokeWidth(5);
overlayView.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
ArrayList<Prediction> predictions = gestureLibrary.recognize(gesture);
ArrayList<String> result = new ArrayList<String>();
for (Prediction pre:predictions){
if(pre.score>2.0){
result.add("与手势【"+pre.name+"】相似度为"+pre.score);
}
}
if (result.size() >0) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(SecondActivity.this,
android.R.layout.simple_list_item_1,result);
new AlertDialog.Builder(SecondActivity.this).setAdapter(adapter,null)
.setPositiveButton("确定",null).show();
} else {
Toast.makeText(SecondActivity.this,"无法找到匹配的手势",Toast.LENGTH_SHORT).show();
}
}
});
}
}