2016-06-03 7 views
0

카메라 뷰 위에 표시되는 캔버스에 선 그림이있는 안드로이드 앱을 만들고 있습니다. 그 목적은 그 경계에서 이미지를 캡처하기위한 개요를 제공하는 선을 그리는 것입니다. enter image description here안드로이드가 그려진 선을 터치 한 상태에서 드래그합니다.

그림을 그릴 때 경계선으로 사용되는 선을 그릴 수 있습니다. 하지만 내가 원하는 것은 내가 그린 선을 드래그 할 수 없거나 드로잉 한 후에 선의 크기를 조절할 수 없다는 것입니다. 현재 선을 그릴 때 매우 신중해야하며 약간의 편차가 필요합니다.

그래서 누군가가 라인에서 드래그 리스너를 구현할 수 있습니다. 손가락으로 라인을 터치 할 때들을 수있는 객체로 라인을 만드는 방법은 무엇입니까?

감사합니다, 이르판

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 


      downx = event.getX(); 
      downy = event.getY();   

      fstTouch = downx; 
      fstTouchx = downx; 
      fstTouchY = downy;  
      break; 

     case MotionEvent.ACTION_MOVE: 

      break; 

     case MotionEvent.ACTION_UP: 
      upx = event.getX(); 
      upy = event.getY(); 

      if (actionE == 1) { 
       actionE = 2; 

       canvas.drawLine(downx, downy, upx, upy, Manage_Template.mPaint); 
       invalidate(); 
       editor.putFloat("downx", fstTouchx); 
       editor.putFloat("downy", fstTouchY); 
       editor.putString("fst", "2"); 
       editor.putFloat("newDownx", upx); 
       editor.putFloat("newDowny", upy); 
       editor.commit(); 

      } 
       else { 

       fDownx = sharedPreferences.getFloat("downx", 0); 
       fDowny = sharedPreferences.getFloat("downy", 0); 
       newDownx = sharedPreferences.getFloat("newDownx", 0); 
       newDowny = sharedPreferences.getFloat("newDowny", 0); 


       fstLate = fstTouch - fDownx; //85-100=15 
       scndLate = fstTouch - newDownx;//120-100=30 

       st = String.valueOf(fstLate); 
       sl = String.valueOf(scndLate); 
       st = st.replace("-", ""); 
       sl = sl.replace("-", ""); 
       fstLate = Float.parseFloat(st); 
       scndLate = Float.parseFloat(sl); 

       if (fstLate >= scndLate) { 

        canvas.drawLine(newDownx, newDowny, upx, upy, Manage_Template.mPaint); 
        editor.putFloat("newDownx", upx); 
        editor.putFloat("newDowny", upy); 
        editor.commit(); 
        invalidate(); 
        Log.d("Action UP","fstlate>"); 

       } else { 
        canvas.drawLine(fDownx, fDowny, upx, upy, Manage_Template.mPaint); 
        editor.putFloat("downx", upx); 
        editor.putFloat("downy", upy); 
        editor.putFloat("newDownx", newDownx); 
        editor.putFloat("newDowny", newDowny); 
        editor.commit(); 
        invalidate(); 
        Log.d("Action UP","scndlate"); 
       } 
      } 
      // } 

      break; 
    } 
    return true; 
} 
+0

테스트 코드 추가 –

답변

1

나는이 작업을 수행하기 위해 onTouchListener를 사용하십시오.

Using OnTouchListener 내가 원하는 중요한 것은, 모든 MotionEvent.ACTION_MOVE 동안 라인을 업데이트하고 어디는 MotionEvent.ACTION_UP

을 얻을 때, 행을 떠날 생각 : 여기에 내가 그것에 대해 배울 때 내가 사용하는 예입니다 희망이 도움이!

+0

터치 리스너가 해당 사용자가 회선을 클릭했음을 식별하는 방법은 회선이 캔버스에 그려지기 때문에 고정되어 있습니다. 줄을 클릭 한 다음 줄을 지우고 다른 줄로 이동하는 방법을 알 수 있습니까? –

+0

이 링크를 확인해보십시오. 클릭과 선 사이의 거리를 쉽게 찾을 수 있습니다. https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line 그런 다음 이동을 위해 화면을 지우고 모든 것을 다시 그려야합니다. –

+0

감사합니다. 감사합니다! –