title: Ontouch() isn't work with custom view?
body: <p>I have a class it extends "View" and Implement "OnTouchListener" so it's will override ontouch method automatically but this method not work. I try to debug by put breakpoint in this method but it isn't called. </p>
  
  <p>I try to this problem from another forums. they tell that onTouch() must return true; But it's not better.</p>
  
  <p>my class problem :</p>
  
  <pre><code>public class Viewer extends View implements  OnTouchListener{
  
  /** Constant tile width. */
  public static final int TILEW = 32;
  /** Constant tile height. */
  public static final int TILEH = 70;
  /** Constant tile shift due to increased level. */
  public static final int TILESKEW = 7;   
  /** Tile images. */
  private Bitmap[][] tileImages;
  /** Highlighted tile images. */
  private Bitmap[][] tileImagesHL;
  /** Board itself. */
  private Board b;
  private Tile[][][] tTile;
  private float screenWidth  = Defines.getScreenWidth();
  private float screenHeight = Defines.getScreenHeight();
  
  private float offsetImg = Defines.getOffsetImage();
  private float reScalePosX = Defines.getReScalePosX();
  private float reScalePosY = Defines.getReScalePosY();
  
  private boolean firstIter;
  
  /** Stores selected tiles */
  private ArrayList&lt;Tile&gt; selectedTiles;// = new ArrayList&lt;Tile&gt;();
  
  /** Stores highlighted tiles by Hint */
  private ArrayList&lt;Tile&gt; highlightedTiles;// = new ArrayList&lt;Tile&gt;();
  
  //////////////////////////////////////////////////
  private static RectF screen;
  private Images imgObj;  
  
  public Viewer(Context context) {
      super(context);
      // TODO Auto-generated constructor stub
      imgObj = new Images(context);   
      b = new MainActivity().board;
  
      Defines.setScreenRender(1280, 800);     
      makeTileImages(Board.MAXGROUPS);    
  }
  
  @Override
  protected void onDraw(Canvas canvas){   
      drawBackGround(imgObj.bg01, canvas);    
      try{
          tTile = b.getContent();
          if(tTile==null || tileImages==null){
              return;
          }
          drawTile(tTile, canvas);
  
  
      }catch (Exception e) {
          // TODO: handle exception                       
      }
  }
  
  
  @Override
  public boolean onTouch(View v, MotionEvent event) {
      // TODO Auto-generated method stub
      Log.d("Mydebug", "YEHHHHHH");
      Tile[][][] content = b.getContent();
      for (int i = 0; i &lt; content.length; i++) {
          for (int y = 0; y &lt; content[i].length; y++) {
              for (int x = 0; x &lt; content[i][y].length; x++) {
                  processMouseClick(content, i, y , x, event);
              }
          }
      }               
      return true;
  }
  
  
  
  public void drawBackGround(Bitmap bitmapBG,Canvas canvas){      
      screen = new RectF(0.0f, 0.0f, Defines.getScreenWidth(),Defines.getScreenHeight());
      canvas.drawBitmap(bitmapBG, null, screen, null);
  
  }
  
  private void makeTileImages(int groups){
      tileImages = loadTileset(groups, "unlit_");
      tileImagesHL = loadTileset(groups, "lit_");
  }
  
  private Bitmap[][] loadTileset(int groups,String prefix){
      Bitmap[][] tr = new Bitmap[groups][Board.GROUPSIZE];        
      try{
          InputStream is =  this.getResources().getAssets().open("Tiles/tiles.set");
          BufferedReader f = new BufferedReader(new InputStreamReader(is));
          String s = f.readLine();
          while (s!=null) {
              if (!s.startsWith("#")) {
                  String[] tokens = s.split(" ");
                  try{
                      int groupNum =Integer.parseInt(tokens[0]);
                      for(int i =1; i&lt;=(Board.GROUPSIZE);i++){    
                              String pathPNG = "Tiles/"+prefix+tokens[i]+".png";
                              Bitmap img = imgObj.loadImage(pathPNG);
                              img = imgObj.resizeBitmap(img,Tile.tileHeight, Tile.tileWidth);
                              //Bitmap img = loadImage(pathPNG);  
                              //Log.d("Mydebug", "PATH:"+pathPNG);
                              tr[groupNum][i-1] = img;
                      }       
  
                  }catch (Exception e) {
                      // TODO: handle exception
                      Log.d("Mydebug", "File error TIles/tile.set");
                  }
  
              }
              s = f.readLine();
          }
      }catch (Exception e) {
          // TODO: handle exception
  
      }       
      return tr;
  }
  
  
  public void drawTile(Tile[][][] content,Canvas canvas){
      for (int i = 0; i &lt; content.length; i++) {
          for (int y = 0; y &lt; content[i].length; y++) {
              for (int x = 0; x &lt; content[i][y].length; x++) {
                  final Tile t = content[i][y][x];
                  if (t != null) {
                      if (y&gt;0 &amp;&amp; content[i][y-1][x]!=null &amp;&amp; t.equals(content[i][y-1][x])) {
                          continue;
                      }
                      if (x&gt;0 &amp;&amp; content[i][y][x-1]!=null &amp;&amp; t.equals(content[i][y][x-1])) {
                          continue;
                      }
                      Bitmap image = tileImages[t.getValue()][t.getSubindex()];
  
                      if (b.free(t)) {
                          image = tileImagesHL[t.getValue()][t.getSubindex()];
                      }       
                          /* Draw tile images to panel */
                      //canvas.drawBitmap(image, x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW, null);
                      canvas.drawBitmap(image, (x*TILEW+TILEW/2+i*TILESKEW)+200, ((y+1)*TILEH/2-i*TILESKEW)+100, null);
  
                  }
              }
          }
      }
  }
  
  
  /** A helper function for the Viewer constructor which accompanies the mouseListener object on each tiles
   * @param content The current board's 3D array of positions
   * @param i The current tile's x position
   * @param y The current tile's y position
   * @param x The current tile's z position
   * @param me The mouseEvent for each tile
   */
  private void processMouseClick(Tile[][][] content, int i, int y, int x, MotionEvent touchPos){
      final Tile t = content[i][y][x];
  
      if (t != null) {
          if (y&gt;0 &amp;&amp; content[i][y-1][x]!=null &amp;&amp; t.equals(content[i][y-1][x])) {
              return;
          }
          if (x&gt;0 &amp;&amp; content[i][y][x-1]!=null &amp;&amp; t.equals(content[i][y][x-1])) {
              return;
          }
  
          Bitmap image = tileImages[t.getValue()][t.getSubindex()];
  
          if (b.free(t)) {
              image = tileImagesHL[t.getValue()][t.getSubindex()];                
          }
  
  
          // Rectangle representing space of tile 
          final Rect rect = new Rect(x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW, image.getWidth(), image.getHeight());
  
          //if ((rect.contains(me.getPoint())) &amp;&amp; b.free(t) &amp;&amp; t.isVisible()) {
          if ((rect.contains((int)touchPos.getX(), (int)touchPos.getY()) &amp;&amp; b.free(t))){
              t.wasClicked = true;
              firstIter = false;
              Log.d("MyDebug", "Clicked ME");
              //if (content[i][y][x].isVisible()){
                       //Add corresponding JLabel to panel                    
              //      t.tLabel.setBounds(x*TILEW+TILEW/2+i*TILESKEW, (y+1)*TILEH/2-i*TILESKEW, image.getWidth(null), image.getHeight(null));
              //      t.tLabel.setVisible(false); 
              //      t.tLabel.setBorder(BorderFactory.createLineBorder(Color.blue, 2));
              //}             
              //validClick(t); 
          }
      }
  }
  }
  </code></pre>