package com.lfk.demo.Activity; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import com.lfk.justwetools.View.PaintIt.OnPathListener; import com.lfk.justwetools.View.PaintIt.PaintView; import com.lfk.justwetools.View.PaintIt.PathNode; import com.lfk.justwetools.View.PaintIt.UserInfo; import com.lfk.demo.R; import java.io.File; public class PaintViewActivity extends Activity implements View.OnClickListener,View.OnLongClickListener { private PaintView paintView; private PathNode pathNode; private EditText editText; private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/DrawAPicture"; private File dir; private AlertDialog alertDialog; private AlertDialog alertDialog2; private static final int SELECT_PICTURE = 2; private static final int SELECT_FILE = 3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_paint_view); // Just a line ,you can use a Paintview. paintView = (PaintView) findViewById(R.id.paintView); // If you want to have more function , you have to do this. // 1.new a PathNode (Don't forget add "android:name=".PaintIt.PathNode" in // AndroidManifest.xml) pathNode = (PathNode) getApplication(); // 2.allow record paintView.setIsRecordPath(true, pathNode); // 3.setOnPathClickListener add your every touch message paintView.setOnPathListener(new OnPathListener() { @Override public void addNodeToPath(float x, float y, int event, boolean IsPaint) { PathNode.Node tempnode = pathNode.new Node(); // convert px to dp tempnode.x = paintView.px2dip(x); tempnode.y = paintView.px2dip(y); if (IsPaint) { tempnode.PenColor = UserInfo.PaintColor; tempnode.PenWidth = UserInfo.PaintWidth; } else { tempnode.EraserWidth = UserInfo.EraserWidth; } tempnode.IsPaint = IsPaint; Log.e(tempnode.PenColor + ":" + tempnode.PenWidth + ":" + tempnode.EraserWidth, tempnode.IsPaint + ""); tempnode.TouchEvent = event; tempnode.time = System.currentTimeMillis(); pathNode.addNode(tempnode); } }); // 4.set buttons findViewById(R.id.save).setOnClickListener(this); findViewById(R.id.redraw).setOnClickListener(this); findViewById(R.id.paint).setOnClickListener(this); findViewById(R.id.eraser).setOnClickListener(this); findViewById(R.id.clear).setOnClickListener(this); findViewById(R.id.file).setOnClickListener(this); findViewById(R.id.color).setOnClickListener(this); findViewById(R.id.file).setOnLongClickListener(this); findViewById(R.id.paint).setOnLongClickListener(this); findViewById(R.id.eraser).setOnLongClickListener(this); findViewById(R.id.save).setOnLongClickListener(this); // 5.new a folder save(); } private void save() { dir = new File(PATH); if (!dir.exists()) { dir.mkdirs(); Log.e(PATH, dir.mkdirs() + ""); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.save: save(); paintView.BitmapToPicture(dir); break; case R.id.clear: // You should clean 3 (Paintview/list to record/list to build Redo/Undo) if (!paintView.isShowing()) { paintView.clean(); pathNode.clearList(); paintView.clearReUnList(); } break; case R.id.redraw: paintView.preview(pathNode.getPathList()); break; case R.id.eraser: // use eraser paintView.Eraser(); break; case R.id.paint: // use paint paintView.Paint(); break; case R.id.file: // input a picture Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(Intent.createChooser(intent, "选择图片"), SELECT_PICTURE); break; case R.id.color: // Now you could use ColorPickerView // uri:https://code.google.com/p/color-picker-view/ // then paintView.setColor(0xaefffeff); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case SELECT_PICTURE: paintView.setmBitmap(data.getData()); break; case SELECT_FILE: paintView.JsonToPathNodeToHandle(data.getData()); break; } } } @Override public boolean onLongClick(View v) { switch (v.getId()) { case R.id.file: // input a dir with ".lfk" Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("file/*"); startActivityForResult(intent, SELECT_FILE); break; case R.id.save: save(); // save to .lfk frame-by-frame animation (through json) paintView.PathNodeToJson(pathNode, dir); break; case R.id.paint: // set PaintWidth editText = new EditText(this); alertDialog = new AlertDialog.Builder(this).setTitle("请输入0 - 100之间的数字") .setView(editText) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // set in UserInfo UserInfo.PaintWidth = Integer.parseInt(editText.getText().toString()); paintView.setPenWidth(Integer.parseInt(editText.getText().toString())); alertDialog.dismiss(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { alertDialog.dismiss(); } }).show(); break; case R.id.eraser: // set EraserWidth editText = new EditText(this); alertDialog2 = new AlertDialog.Builder(this).setTitle("请输入0 - 100之间的数字") .setView(editText) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // set in UserInfo UserInfo.EraserWidth = Integer.parseInt(editText.getText().toString()); paintView.setmEraserPaint(Integer.parseInt(editText.getText().toString())); alertDialog2.dismiss(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { alertDialog2.dismiss(); } }).show(); break; } return false; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_HOME: moveTaskToBack(true); break; case KeyEvent.KEYCODE_VOLUME_UP: // redo paintView.ReDoORUndo(true); break; case KeyEvent.KEYCODE_VOLUME_DOWN: // undo paintView.ReDoORUndo(false); break; case KeyEvent.KEYCODE_BACK: super.onKeyDown(keyCode, event); break; } return true; } }