diff --git a/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Activity.java b/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Activity.java index 632eecb8ba..2d60a43ba3 100644 --- a/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Activity.java +++ b/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Activity.java @@ -18,39 +18,34 @@ import android.view.View; public class Puzzle15Activity extends Activity implements CvCameraViewListener, View.OnTouchListener { - private static final String TAG = "Sample::Puzzle15::Activity"; + private static final String TAG = "Sample::Puzzle15::Activity"; - private OpenCvNativeCameraView mOpenCvCameraView; - private Puzzle15Processor mPuzzle15; + private OpenCvNativeCameraView mOpenCvCameraView; + private Puzzle15Processor mPuzzle15; - private int mGameWidth; - private int mGameHeight; - - - private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { - @Override - public void onManagerConnected(int status) { - switch (status) { - case LoaderCallbackInterface.SUCCESS: - { - Log.i(TAG, "OpenCV loaded successfully"); - - mPuzzle15 = new Puzzle15Processor(); - mPuzzle15.prepareNewGame(); - /* Now enable camera view to start receiving frames */ - mOpenCvCameraView.setOnTouchListener(Puzzle15Activity.this); - mOpenCvCameraView.enableView(); - } break; - default: - { - super.onManagerConnected(status); - } break; - } - } - }; + private int mGameWidth; + private int mGameHeight; + private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { + @Override + public void onManagerConnected(int status) { + switch (status) { + case LoaderCallbackInterface.SUCCESS: + { + Log.i(TAG, "OpenCV loaded successfully"); + /* Now enable camera view to start receiving frames */ + mOpenCvCameraView.setOnTouchListener(Puzzle15Activity.this); + mOpenCvCameraView.enableView(); + } break; + default: + { + super.onManagerConnected(status); + } break; + } + } + }; @Override public void onCreate(Bundle savedInstanceState) { @@ -61,12 +56,27 @@ public class Puzzle15Activity extends Activity implements CvCameraViewListener, mOpenCvCameraView = (OpenCvNativeCameraView) findViewById(R.id.puzzle_activity_surface_view); mOpenCvCameraView.setCvCameraViewListener(this); + mPuzzle15 = new Puzzle15Processor(); + mPuzzle15.prepareNewGame(); + } + + @Override + public void onPause() + { + mOpenCvCameraView.disableView(); + super.onPause(); + } + + @Override + public void onResume() + { + super.onResume(); OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, this, mLoaderCallback); } public void onDestroy() { - super.onDestroy(); - mOpenCvCameraView.disableView(); + super.onDestroy(); + mOpenCvCameraView.disableView(); } @Override @@ -79,49 +89,46 @@ public class Puzzle15Activity extends Activity implements CvCameraViewListener, public boolean onOptionsItemSelected(MenuItem item) { Log.i(TAG, "Menu Item selected " + item); if (item.getItemId() == R.id.menu_start_new_game) { - /* We need to start new game */ - mPuzzle15.prepareNewGame(); + /* We need to start new game */ + mPuzzle15.prepareNewGame(); } else if (item.getItemId() == R.id.menu_toggle_tile_numbers) { - /* We need to enable or disable drawing of the tile numbers */ - mPuzzle15.toggleTileNumbers(); + /* We need to enable or disable drawing of the tile numbers */ + mPuzzle15.toggleTileNumbers(); } return true; } + @Override + public void onCameraViewStarted(int width, int height) { + mGameWidth = width; + mGameHeight = height; + mPuzzle15.prepareGameSize(width, height); + } - @Override - public void onCameraViewStarted(int width, int height) { - mGameWidth = width; - mGameHeight = height; - mPuzzle15.prepareGameSize(width, height); - } - - @Override - public void onCameraViewStopped() { - } - - @Override - public Mat onCameraFrame(Mat inputFrame) { - return mPuzzle15.puzzleFrame(inputFrame); - } - - @Override - public boolean onTouch(View view, MotionEvent event) { - int xpos, ypos; - - xpos = (view.getWidth() - mGameWidth) / 2; - xpos = (int)event.getX() - xpos; - - ypos = (view.getHeight() - mGameHeight) / 2; - ypos = (int)event.getY() - ypos; - - if (xpos >=0 && xpos <= mGameWidth && ypos >=0 && ypos <= mGameHeight) { - /* click is inside the picture. Deliver this event to processor */ - mPuzzle15.deliverTouchEvent(xpos, ypos); - } - - // TODO Auto-generated method stub - return false; + @Override + public void onCameraViewStopped() { + } + + @Override + public Mat onCameraFrame(Mat inputFrame) { + return mPuzzle15.puzzleFrame(inputFrame); + } + + @Override + public boolean onTouch(View view, MotionEvent event) { + int xpos, ypos; + + xpos = (view.getWidth() - mGameWidth) / 2; + xpos = (int)event.getX() - xpos; + + ypos = (view.getHeight() - mGameHeight) / 2; + ypos = (int)event.getY() - ypos; + + if (xpos >=0 && xpos <= mGameWidth && ypos >=0 && ypos <= mGameHeight) { + /* click is inside the picture. Deliver this event to processor */ + mPuzzle15.deliverTouchEvent(xpos, ypos); } + return false; + } } diff --git a/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Processor.java b/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Processor.java index b8ef702ab0..bc2f042b42 100644 --- a/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Processor.java +++ b/samples/android/15-puzzle-framework/src/org/opencv/samples/puzzle15/Puzzle15Processor.java @@ -19,18 +19,17 @@ public class Puzzle15Processor { private static final int GRID_SIZE = 4; private static final int GRID_AREA = GRID_SIZE * GRID_SIZE; private static final int GRID_EMPTY_INDEX = GRID_AREA - 1; - private static final String TAG = "Puzzle15Processor"; + private static final String TAG = "Puzzle15Processor"; private int[] mIndexes; private int[] mTextWidths; private int[] mTextHeights; - private Mat mRgba; private Mat mRgba15; private Mat[] mCells; private Mat[] mCells15; - private boolean mShowTileNumbers = true; + private boolean mShowTileNumbers = true; public Puzzle15Processor() { mTextWidths = new int[GRID_AREA]; @@ -38,13 +37,8 @@ public class Puzzle15Processor { mIndexes = new int [GRID_AREA]; - for (int i = 0; i < GRID_AREA; i++) { - Size s = Core.getTextSize(Integer.toString(i + 1), 3/* CV_FONT_HERSHEY_COMPLEX */, 1, 2, null); - mTextHeights[i] = (int) s.height; - mTextWidths[i] = (int) s.width; - + for (int i = 0; i < GRID_AREA; i++) mIndexes[i] = i; - } } /* this method is intended to make processor prepared for a new game */ @@ -67,34 +61,33 @@ public class Puzzle15Processor { for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { int k = i * GRID_SIZE + j; -// mCells[k] = mRgba.submat(i * height / GRID_SIZE, (i + 1) * height / GRID_SIZE, j * width / GRID_SIZE, (j + 1) * width / GRID_SIZE); mCells15[k] = mRgba15.submat(i * height / GRID_SIZE, (i + 1) * height / GRID_SIZE, j * width / GRID_SIZE, (j + 1) * width / GRID_SIZE); } } - + for (int i = 0; i < GRID_AREA; i++) { + Size s = Core.getTextSize(Integer.toString(i + 1), 3/* CV_FONT_HERSHEY_COMPLEX */, 1, 2, null); + mTextHeights[i] = (int) s.height; + mTextWidths[i] = (int) s.width; + } } - /* this method to be called from the outside. it processes the frame and shuffles * the tiles as specified by mIndexes array */ public synchronized Mat puzzleFrame(Mat inputPicture) { - int rows = inputPicture.rows(); - int cols = inputPicture.cols(); - - int type = inputPicture.type(); + int rows = inputPicture.rows(); + int cols = inputPicture.cols(); rows = rows - rows%4; cols = cols - cols%4; - for (int i = 0; i < GRID_SIZE; i++) { for (int j = 0; j < GRID_SIZE; j++) { int k = i * GRID_SIZE + j; mCells[k] = inputPicture.submat(i * inputPicture.rows() / GRID_SIZE, (i + 1) * inputPicture.rows() / GRID_SIZE, j * inputPicture.cols()/ GRID_SIZE, (j + 1) * inputPicture.cols() / GRID_SIZE); } - } + } rows = rows - rows%4; cols = cols - cols%4; @@ -115,23 +108,22 @@ public class Puzzle15Processor { drawGrid(cols, rows, mRgba15); - return mRgba15; + return mRgba15; } - public void toggleTileNumbers() { - mShowTileNumbers = !mShowTileNumbers; + mShowTileNumbers = !mShowTileNumbers; } public void deliverTouchEvent(int x, int y) { - int rows = mRgba15.rows(); - int cols = mRgba15.cols(); + int rows = mRgba15.rows(); + int cols = mRgba15.cols(); int row = (int) Math.floor(y * GRID_SIZE / rows); int col = (int) Math.floor(x * GRID_SIZE / cols); if (row < 0 || row >= GRID_SIZE || col < 0 || col >= GRID_SIZE) { - Log.e(TAG, "It is not expected to get touch event outside of picture"); + Log.e(TAG, "It is not expected to get touch event outside of picture"); return ; } @@ -172,7 +164,6 @@ public class Puzzle15Processor { } } - private static void shuffle(int[] array) { for (int i = array.length; i > 1; i--) { int temp = array[i - 1]; @@ -199,5 +190,4 @@ public class Puzzle15Processor { } return sum % 2 == 0; } - }