2014-10-13 2 views
1

캔버스보기에 여러 개의 사각형이 있으며 오른쪽 및 아래쪽 위치의 텍스트 형태로 모든 사각형의 너비와 높이를 각각 표시하려고합니다.텍스트를 캔버스에 그려서 드래그 할 수있게하십시오. Android

Canvas.DrawText(text,x,y,paint); 

나는 그 너비와 높이를 그릴 수 있지만 드래그 할 수있게하여 사용자가 하나의 사각형의 너비 또는 높이를 쉽게 지정할 수 있도록하고 싶습니다.

문제는 우리가 어떻게 사각형을 텍스트로 클릭하는지 정확하게 감지 할 수 있다는 것입니다. 도와주세요! dimens.xml의 모든 해상도 설정 차원

답변

0

<dimen name="myFontSize20">20sp</dimen> 
<dimen name="myFontSize75">75sp</dimen> 

// ------------

myFontSize75=75; 
EdtText touchedtext; 
ArrayList<EdtText> editTexts = new ArrayList<EdtText>(); 
int imageSize20 = getResources().getDimensionPixelSize(R.dimen.myFontSize20); 
int imageSize75 = getResources().getDimensionPixelSize(R.dimen.myFontSize75); 

스토어 배열 목록에서 텍스트와 OnTouch 이벤트를 찾을 수 어떤 텍스트를 터치했는지.

텍스트의 경우 해당 위치에 텍스트가 이미 있는지 확인하거나 그 위치에 있지 않은 경우 해당 위치에 없는지 확인한 다음 해당 위치에 새 텍스트를 만들거나 그렇지 않으면 터치 한 텍스트를 반환합니다.

/--------------Edit text class------------------// 
     class EdtText { 
      float startX, stopY; 
      float textsize; 

      String EdtText1; 

      public EdtText(String EdtText, float startX, float stopY, float textsize) { 
       this.EdtText1 = EdtText; 
       this.textsize = textsize; 
       this.startX = startX; 
       this.stopY = stopY; 
      } 

     } 

// -------------- 확인 텍스트는 이미 --------------- //

터치 위치에인지
private EdtText obtainTouchedText(final float xTouch2, final float yTouch2) { 
     EdtText touchedtext = getTouchedtext(xTouch2, yTouch2, 1); 

    //for getting textSize 
    textsize = c.getTextsize(); 
    if (null == touchedtext) { 

     touchedtext = new EdtText("kdsks", xTouch2, yTouch2, textsize); 
     editTexts.add(touchedtext); 
} 
    return touchedtext; 
} 

    private EdtText getTouchedtext(float xTouch2, float yTouch2, int i) { 
      EdtText touched2 = null; 
    for (EdtText edt : editTexts) { 
     String hb = edt.EdtText1.toString(); 
     int k = hb.length(); 


     if (((Math.abs(edt.startX + ((k/2) * 16) - xTouch2) < imageSize75) || (Math.abs(edt.startX + ((k) * 16) - xTouch2) < imageSize75)) && (Math.abs(edt.stopY - yTouch2) < imageSize20)) { 

      touched2 = edt; 
      if (i == 0) { 
       text_cir++; 
      } else { 

      } 
      break; 
     } else { 

     } 
    } 

    return touched2; 
} 

// 캔버스에 드래그 텍스트의

@Override 
    public boolean onTouchEvent(final MotionEvent event) { 
    boolean handled = false; 

    float xTouch = 0; 
    float yTouch = 0; 
    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: 
      xTouch = event.getX(0); 
      yTouch = event.getY(0); 

      touchedtext = getTouchedtext(xTouch, yTouch, 0); 

      if (touchedtext != null) { 
       dx = xTouch - touchedtext.startX; 
       dy = yTouch - touchedtext.stopY; 

      } 

     case MotionEvent.ACTION_MOVE: 
      endX = event.getX(); 
      endY = event.getY(); 
      float x_add = endX - dx; 
      float y_add = endY- dy; 
      touchedtext.startX = x_add; 
      touchedtext.stopY = y_add; 
      invalidate(); 
      handled = true; 
      break; 

     case MotionEvent.ACTION_UP: 
      invalidate(); 
      handled = true; 
      break; 

     case MotionEvent.ACTION_POINTER_UP: 
      break; 

     case MotionEvent.ACTION_CANCEL: 
      invalidate(); 

      break; 

     default: 
     break; 
    } 
    invalidate(); 
    return super.onTouchEvent(event) || handled; 
} 

// -의 OnDraw 방법은 텍스트를 그리기 위해이 코드를 추가 --------------- //

for (EdtText l : editTexts) { 

      canvas.drawText(l.EdtText1, l.startX, l.stopY, mPaint); 
} 
관련 문제