2014-09-25 5 views
0

나는 사람의 이미지를자를 수있는 응용 프로그램을 만들고 있습니다. 내 응용 프로그램의 레이아웃은 더 나은 설명동적으로 사각형 크기를 변경하십시오 android

enter image description here

다음

사각형은 길이와 폭에 의해 정의 된 이미지를 캡처하는 데 사용됩니다 줄 것이다. 사각형은 움직일 수 있습니다. 사각형을 다시 크기를 조정하는 방법은 어떻게됩니까? 예를 들면. WhatsApp에서 직사각형 내부의 영역을 터치하면 직사각형이 움직입니다. 직사각형의 가장자리를 만지면 자르기에 적합한 이미지의 크기를 조정할 수 있습니다. 그래서, 나는 2 개의 질문이있다. 1) 직사각형의 가장자리에서 Touch 이벤트를받는 방법과 2) 직사각형의 크기를 조정하는 방법. 내 사각형을 그릴 때 캔버스를 사용하고 있습니다.

public class CustomView extends Views 
{ 


public CustomView(Context context) 
{ 
     super(context); 
} 

@Override 
protected void onDraw(Canvas canvas) 
{ 
     super.onDraw(canvas); 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);; 
     paint.setColor(Color.BLUE); 
     paint.setStrokeWidth(3); 
     paint.setStyle(Paint.Style.STROKE); 
     canvas.drawRect(0, 0, 300, 300, paint); 
} 
} 

답변

1

당신은 OnTouchListener를 구현하고 사각형을 만지면 MotionEvent.ACTION_DOWN에 확인하고 내가 제공되지 MotionEvent.ACTION_MOVE

에서 오른쪽, 왼쪽, 아래쪽 및 사각형의 상단을 수정해야 다음과 같이 이에 대한 코드는 시험 예 : 당신이 사각형을 터치 한 경우 확인해야

public class CustomView extends View { 

    private float left=0,right = 300, top = 0, bottom = 300; 

    public CustomView(Context context) 
    { 
     super(context); 
     setOnTouchListener(new OnTouchListener() { 
      float oldX, oldY; 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       boolean touch = false; 
       switch (event.getAction()){ 
        case MotionEvent.ACTION_DOWN: 
         touch = isTouchBorderRect(); 
         break; 
        case MotionEvent.ACTION_UP: 
         touch = false; 
        case MotionEvent.ACTION_MOVE: 
         if (touch){ 
          float newX = event.getRawX(); 
          float newY = event.getRawY(); 
          float deltaX = newX-oldX; 
          float deltaY = newY-oldY; 

          left-=deltaX; 
          right +=deltaX; 
          bottom += deltaY; 
          top -= deltaY; 

         } 
         break; 

       } 
       return false; 
      } 
     }); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);; 
     paint.setColor(Color.BLUE); 
     paint.setStrokeWidth(3); 
     paint.setStyle(Paint.Style.STROKE); 
     canvas.drawRect(left, top, right, bottom, paint); 
    } 

} 

방법 isTouchBorderRect()에서.

이 코드는 테스트하지 않았지만 개발하겠다는 아이디어를 보여줍니다.

관련 문제