title: Custom view has setOnTouchListener called on it but does not override performClick (class extends Activity NOT View)
body: <p>I have created an Android Activity implementing a bit of OpenCV. What it does is to simply create a Custom Camera View, and when the screen is touched, the photo will be saved.</p>
  
  <p>My only problem is that the code <code>mOpenCvCameraView.setOnTouchListener(MainActivity.this);</code> inside the BaseLoaderCallback contains a warning.</p>
  
  <p><code>mOpenCvCameraView.setOnTouchListener(MainActivity.this);</code> warns about</p>
  
  <blockquote>
    <p>Custom view com/example/zcameratestv2/Version2CameraView has setOnTouchListener called on it but does not override performClick</p>
  </blockquote>
  
  <p>Unlike other questions, my class extends an Activity not View, so when i try to override the function <code>private boolean performClick() { ...super.performClick(); }</code> it is not recognized. Here are my classes </p>
  
  <pre><code>package com.example.zcameratestv2;
  
  import java.text.SimpleDateFormat;
  import java.util.Date;
  
  import org.opencv.android.BaseLoaderCallback;
  import org.opencv.android.OpenCVLoader;
  import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener;
  import org.opencv.android.LoaderCallbackInterface;
  import org.opencv.core.Mat;
  
  import android.annotation.SuppressLint;
  import android.app.Activity;
  import android.os.Bundle;
  import android.os.Environment;
  import android.util.Log;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.MotionEvent;
  import android.view.SurfaceView;
  import android.view.View;
  import android.view.WindowManager;
  import android.view.View.OnTouchListener;
  import android.widget.Toast;
  
  public class MainActivity extends Activity implements CvCameraViewListener, OnTouchListener {
  
  private Version2CameraView mOpenCvCameraView;
  private static final String TAG = "Version 2::Activity";
  
  private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
      @Override
      public void onManagerConnected(int status) {
          switch (status) {
              case LoaderCallbackInterface.SUCCESS:
              {
                  Log.i(TAG, "OpenCV loaded successfully");
                  mOpenCvCameraView.enableView();
                  mOpenCvCameraView.setOnTouchListener(MainActivity.this);
              } break;
              default:
              {
                  super.onManagerConnected(status);
              } break;
          }
      }
  };
  
  public MainActivity() {
      Log.i(TAG, "Version 2 Class instantiated");
  }
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  
      setContentView(R.layout.activity_main);
  
      mOpenCvCameraView = (Version2CameraView) findViewById(R.id.java_surface_view);
  
      mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
  
      mOpenCvCameraView.setCvCameraViewListener(this);
  
  }
  
  public void onPause()
  {
      super.onPause();
      if (mOpenCvCameraView != null)
          mOpenCvCameraView.disableView();
  }
  
  @Override
  public void onResume()
  {
      super.onResume();
      OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
  }
  
  public void onDestroy() {
      super.onDestroy();
      if (mOpenCvCameraView != null)
          mOpenCvCameraView.disableView();
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  
  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      int id = item.getItemId();
      if (id == R.id.action_settings) {
          return true;
      }
      return super.onOptionsItemSelected(item);
  }
  
  @Override
  public void onCameraViewStarted(int width, int height) {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public void onCameraViewStopped() {
      // TODO Auto-generated method stub
  
  }
  
  @Override
  public Mat onCameraFrame(Mat inputFrame) {
      // TODO Auto-generated method stub
      return null;
  }
  
  @SuppressLint("SimpleDateFormat")
  @Override
  public boolean onTouch(View v, MotionEvent event) {
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
          //some code....
          break;
      case MotionEvent.ACTION_UP:
          Log.i(TAG,"onTouch event");
          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
          String currentDateandTime = sdf.format(new Date());
          String fileName = Environment.getExternalStorageDirectory().getPath() +
                                 "/sample_picture_" + currentDateandTime + ".jpg";
          mOpenCvCameraView.takePicture(fileName);
          Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show();
          v.performClick();
          break;
      default:
          break;
      }
      return true;
   }
  
  
  }
  </code></pre>
  
  <p>Previously the <code>public boolean onTouch(View v, MotionEvent event)</code> event had a similar warning similar to the OnTouchListener, it displays that I should use a performClick(); method but I cant override it since I extend to an <code>Activity</code> not a <code>View</code>. And I have discovered that applying <code>v.PerformClick();</code> fixes this.</p>
  
  <p>This other class handles the camera processes </p>
  
  <pre><code>package com.example.zcameratestv2;
  
  import java.io.FileOutputStream;
  
  import org.opencv.android.JavaCameraView;
  
  import android.content.Context;
  import android.hardware.Camera;
  import android.hardware.Camera.PictureCallback;
  import android.util.AttributeSet;
  import android.util.Log;
  
  public class Version2CameraView extends JavaCameraView implements PictureCallback {
  
  private static final String TAG = "Version2::CameraView";
  private String mPictureFileName;
  
  public Version2CameraView(Context context, AttributeSet attrs) {
      super(context, attrs);
  }
  
  public void takePicture(final String fileName) {
      Log.i(TAG, "Taking picture");
      this.mPictureFileName = fileName;
      // Postview and jpeg are sent in the same buffers if the queue is not empty when performing a capture.
      // Clear up buffers to avoid mCamera.takePicture to be stuck because of a memory issue
      mCamera.setPreviewCallback(null);
  
      // PictureCallback is implemented by the current class
      mCamera.takePicture(null, null, this);
  }
  
  @Override
  public void onPictureTaken(byte[] data, Camera camera) {
      Log.i(TAG, "Saving a bitmap to file");
      // The camera preview was automatically stopped. Start it again.
      mCamera.startPreview();
      mCamera.setPreviewCallback(this);
  
      // Write the image in a file (in jpeg format)
      try {
          FileOutputStream fos = new FileOutputStream(mPictureFileName);
  
          fos.write(data);
          fos.close();
  
      } catch (java.io.IOException e) {
          Log.e("PictureDemo", "Exception in photoCallback", e);
      }
  
  }
  }
  </code></pre>
  
  <p>I have included the required permissions in the Manifest File such as the CAMERA and the WRITE_EXTERNAL_STORAGE</p>
  
  <p>Can someone determine the problem? Need your help. Thanks in advance!</p>