2012-07-05 90 views
0

我正在绘制圆线,并希望线条匹配时会产生错误。我已经完成了一些编码,并且此代码可以在线条上画线,但问题在于线条匹配时它无法产生错误。所以任何人都可以建议我做错了什么。线条碰撞时产生线条并产生错误

代码

 public class DrawView extends View implements View.OnTouchListener { 
     private static final String TAG = "DrawView"; 

     List<Point> points = new ArrayList<Point>(); 
     Paint paint = new Paint(); 

     public DrawView(Context context) { 
      super(context); 
      setFocusable(true); 
      setFocusableInTouchMode(true); 

      DrawView.this.setOnTouchListener(DrawView.this); 

      paint.setColor(Color.WHITE); 
      paint.setAntiAlias(true); 
     } 

     public void onDraw(Canvas canvas) { 
      for (Point point : points) { 
       canvas.drawCircle(point.x, point.y, 5, paint); 
       // canvas.drawLine(point.x, point.y, 5, 0, paint); 
       // canvas.drawPaint(p); 
       // Log.d(TAG, "Painting: "+point); 
      } 
     } 

     public boolean onTouch(View view, MotionEvent event) { 
      // if(event.getAction() != MotionEvent.ACTION_DOWN) 
      // return super.onTouchEvent(event); 
      Point point = new Point(); 
      point.x = event.getX(); 
      point.y = event.getY(); 
      for (int i = 0; i < points.size(); i++) { 
       if (point.equals(points.get(i))) { 
        System.out 
          .println("*****************************ERROR*******************************************"); 
       } else { 
        System.out.println("Value of points" + points); 
        System.out 
          .println("***********************ELSE***********************************"); 
       } 
      } 
      points.add(point); 
      invalidate(); 
      Log.d(TAG, "point: " + point); 
      return true; 
     } 
    } 

    class Point { 
    float x, y; 

    public boolean equals(Object o) { 
     if (!(o instanceof Point)) 
      return false; 
     Point p = (Point) o; 
     return x == p.x && y == p.y; 
    } 

    public String toString() { 
     return x + ", " + y; 
    } 
    } 
+1

不要全部限制你的问题,那只会让人失望。 –

+0

定义更清楚你称之为“碰撞” – rds

+0

正确阅读我已经提到所有东西 – Dilip

回答

0

你需要实现equals() - 为您的Point类方法。默认的实现可能不会比较你的x属性。

+0

谢谢@ jpa但你能告诉我怎么做。 – Dilip

+0

@Dilip 'public boolean equals(Object o){(!(o instanceof Point))return false; Point p =(Point)o; return x == p.x && y == p.y; }' – jpa

+0

我很抱歉地说它不工作@jpa – Dilip