2013-06-26 29 views
5

Điều tôi muốn làm là cho phép người dùng ứng dụng Android của tôi chọn điểm trên khuôn mặt và truy lục toạ độ X và Y từ lần chạm đó. Xin vui lòng xem hình dưới đây.Lấy tọa độ XY trung tâm từ lựa chọn

Coordinates from face

Tôi muốn người sử dụng để có thể thay đổi kích thước của hình vuông lựa chọn.

Cho đến giờ tôi có mã bên dưới, nhưng tôi thành thật không biết phải đi đâu từ đó. Làm thế nào để tôi đi về việc vẽ một hình chữ nhật mà người dùng có thể thao tác và di chuyển (và sau đó trả về các tọa độ điểm giữa X và Y từ đó)? I'm sure there's an Android feature for this.

private void selectImg(){ 
    //retrieve X and Y values from touch 
    surfaceView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent pos) { 
      //retrieve position when user finishes touch 
      if (pos.getAction() == MotionEvent.ACTION_UP){ 
        Log.d("X",String.valueOf(pos.getX())); 
        Log.d("Y",String.valueOf(pos.getY())); 
      } 
      return true; 
     } 
    });  
} 

Cảm ơn bạn!

Có thể hữu ích: Custom Android Image Crop https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java

+0

bạn có thể đăng hình ảnh kết quả nếu tôi làm cho hình ảnh này là hình chữ nhật màu vàng được chọn lớn không? – KOTIOS

Trả lời

1

Vâng Nếu tôi hiểu đúng theo mã của bạn bạn đang sử dụng một SurfaceView như vậy để vẽ bên trong nó, bạn có thể đọc các câu trả lời chấp nhận here nơi bên private void drawMyStuff(final Canvas canvas) bạn phải đặt mã để vẽ các hình chữ nhật mà bạn muốn, và hãy gọi invalidate() để vẽ lại số SurfaceView mỗi khi bạn thay đổi thứ gì đó (như tọa độ).

Ngoài ra, bạn có thể tạo tùy chỉnh View và vẽ bên trong nó, bạn có thể xem ví dụ làm việc tôi đang sử dụng trong dự án here.

Bạn đã có tọa độ (x, y) của liên lạc để vẽ các hình chữ nhật bên trong SurfaceView bằng cách sử dụng Canvas.Dưới đây một số mã, bạn có thể sử dụng để tham khảo, tất cả các bạn phải làm là thay đổi số của (x, y) tọa độ nơi bạn muốn vẽ:

Paint paint = new Paint(); 
paint.setColor(Color.BLACK); 
paint.setStrokeWidth(3); 
canvas.drawRect(30, 30, 80, 80, paint); 
paint.setStrokeWidth(0); 
paint.setColor(Color.CYAN); 
canvas.drawRect(33, 60, 77, 77, paint); 
paint.setColor(Color.YELLOW); 
canvas.drawRect(33, 33, 77, 60, paint); 

Bây giờ để thay đổi kích thước hình chữ nhật của bạn, bạn sẽ phải lưu tọa độ ở đâu đó, bạn có thể sử dụng Rect để lưu tọa độ cho mỗi hình chữ nhật bạn có. Sau đó, để kích thước lại chúng, bạn có thể đọc tọa độ từ màn hình cảm ứng và xem chúng có NEAR một số tọa độ hình chữ nhật của bạn hay không. Tôi nói gần vì nó sẽ khó khăn để liên lạc chính xác tọa độ của góc, bạn phải xem nếu nó là ví dụ trong + -10 pixel xung quanh góc. Hãy quan tâm đến kích thước hình chữ nhật có thể là 10 pixel là chiều rộng hoặc chiều cao hình chữ nhật.

Cuối cùng trên ACTION_DOWN bạn theo dõi góc như tôi viết trước và trên ACTION_UP bạn lấy tọa độ mới của góc bạn phát hiện trước đó trên ACTION_DOWN, sau đó, bạn gọi invalidate() để vẽ lại hình chữ nhật của bạn và bạn đã làm xong!

Tôi hy vọng bạn hiểu tôi và giúp bạn theo một cách nào đó :)

4

Tôi không chắc chắn bạn đã làm bao nhiêu của ứng dụng. Tuy nhiên, bạn sẽ cần một cách để xác định di chuyển các ô vuông so với kéo dài các hình vuông. Bạn có thể làm điều này bằng nút hoặc bạn có thể làm điều đó trên thiết kế (di chuyển từ bên trong hình vuông và kéo dài từ giới hạn).

@Override 
    public boolean onTouch(View view, MotionEvent pos) { 
     //retrieve position when user finishes touch 
     if (pos.getAction() == MotionEvent.ACTION_UP){ 
       Log.d("X",String.valueOf(pos.getX())); 
       Log.d("Y",String.valueOf(pos.getY())); 
     } 
     //pseudo code 
     //if user is dragging 
      //get new dragged position 
      //if boundaries are being dragged 
       //redraw square to match new dragged position (requires some math to stretch properly) 
      //else if inside boundaries being dragged 
       //redraw the square to new dragged position (center it) 

     return true; 
    } 

Bạn sẽ cần phải xem xét các ví dụ về cách vẽ lại hình vuông. Tôi không chắc chắn làm thế nào bạn đang vẽ chúng ở nơi đầu tiên.

EDIT: Dưới đây là một số nguồn hữu ích. Nếu bạn kết hợp hai, bạn sẽ có thể dễ dàng đạt được mục tiêu của bạn:

Moving image with touch events

Android: How to stretch an image to the screen width while maintaining aspect ratio?

2

Vì bạn đã nhận được điểm của cảm ứng tất cả các bạn có thể làm là vẽ một hình chữ nhật hoặc hình vuông xung quanh với kích thước mặc định

Point touchPoint=new Point(x, y); 
Paint paint = new Paint(); 
paint.setColor(Color.parseColor("#00CCFF")); 
canvas.drawRect(x, y, x+100, y+100, paint); 

Sau đó, tùy thuộc vào điểm tiếp xúc trong hình chữ nhật, bạn có thể kéo hoặc chia tỷ lệ hình chữ nhật.
Có một hướng dẫn google mà bạn có thể sử dụng để kéo và chia tỷ lệ hình chữ nhật.
Tìm bên dưới liên kết.
http://developer.android.com/training/gestures/scale.html