2013-06-26 5 views
5

목표로하는 것은 Android 애플리케이션의 사용자가 얼굴에서 점을 선택하고 해당 터치에서 X 및 Y 좌표를 검색 할 수있게하려는 것입니다. 아래 그림을 참조하십시오.선택에서 중심점 XY 좌표 가져 오기

Coordinates from face

나는 사용자가 선택 사각형의 크기를 변경할 수 있도록하고 싶습니다.

지금까지 나는 아래의 코드를 가지고 있지만 솔직히 거기에서 어디로 가야할지 전혀 모른다. 사용자가 조작하고 움직일 수있는 직사각형을 그리는 방법 (그리고 나서 X 및 Y 중심 좌표를 반환) 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; 
     } 
    });  
} 

고마워요!

유용 할 수 없습니다 : Custom Android Image Crop https://github.com/dtitov/pickncrop/blob/master/src/com/github/pickncrop/MainActivity.java

+0

당신이 결과 이미지를 게시 할 수 있습니다에 도움이되기를 바랍니다? – KOTIOS

답변

1
나는 당신이 그렇게 그 안에 그리는 것은 당신이 private void drawMyStuff(final Canvas canvas) 내에서 원하는 사각형을 그릴 수있는 코드를 삽입해야 허용 대답 here을 읽을 수있는 SurfaceView를 사용하는 코드에 따라 올바르게 이해하고 잘 경우

하고, 좌표 (예 : 좌표)를 변경할 때마다 invalidate()으로 전화하여 SurfaceView을 다시 그립니다.

또한 사용자 정의 View을 작성하고 그 안에 그림을 그려서 작업 예제를 볼 수 있습니다.

Canvas을 사용하여 SurfaceView 안에 직사각형을 그리려면 이미 터치의 (x, y) 좌표가 있습니다.여기에 몇 가지 코드가 참조로 사용할 수 있습니다, 당신이 할 일은 당신이 그릴 위치를 좌표 (x, y)에 의해 번호를 변경할 수 있습니다 :

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); 

이제 저장해야합니다 귀하의 사각형의 크기를 조정 좌표 어딘가에 Rect을 사용하여 가지고있는 각 사각형의 좌표를 저장할 수 있습니다. 그런 다음 크기를 재조정하기 위해 터치 스크린에서 좌표를 읽고 일부 직사각형 좌표가 가까운 지 확인하십시오. 모퉁이의 좌표를 정확히 만지기가 어려울 것이기 때문에 가까이에서 말합니다. 예를 들어 구석을 중심으로 + -10 픽셀이 있는지 확인해야합니다. 직사각형 크기는 10 픽셀이 직사각형 너비 또는 높이인지 확인하십시오. 내가 전에 쓰기로

마지막 ACTION_DOWN에 당신은 코너를 추적하고 ACTION_UP에 당신은 구석의 새로운 좌표는 다음, 당신은 당신의 사각형을 다시 그려야 invalidate()를 호출하고 작업이 완료, ACTION_DOWN에 전에 발견 받아!

나는 당신이 나를 이해하고 내가 선택한 노란색 사각형이 어떻게 거처럼 결과를 보면됩니다 다음 큰 이미지를 만들 경우 어떤 방법 :

4

나는 당신이했던 방법을 응용 프로그램의 많은 모르겠어요. 그러나 사각형을 움직이는 것과 정사각형을 늘리는 것을 구분할 수있는 방법이 필요합니다. 버튼으로이 작업을 수행 할 수 있습니다. 또는 디자인에서 작업을 수행 할 수 있습니다 (정사각형 안쪽에서 바깥쪽으로 이동).

@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; 
    } 

사각형을 다시 그리는 방법의 예를 살펴볼 필요가 있습니다. 내가 처음에 어떻게 그리는 지 모르겠습니다.

편집 : 다음은 유용한 소스입니다. 이미 터치 지점을 받고 있기 때문에

Moving image with touch events

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

2

당신이 할 수있는 모든 사각형 주위에 사각형을 그리거나 수 있습니다 : 당신이 두 가지를 결합하는 경우에, 당신은 당신의 목표에 도달 할 수 쉽게한다 그것의 기본 크기를 가진

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

그러면 사각형의 터치 포인트에 따라 드래그하거나 사각형의 크기를 조절할 수 있습니다.
사각형을 드래그하고 크기를 조절하는 데 사용할 수있는 Google 자습서가 있습니다.
아래 링크를 찾으십시오.
http://developer.android.com/training/gestures/scale.html