2016-06-03 18 views
0

Ich baue eine Android-App, die die Linienzeichnung auf Leinwand, die über die Kamera anzeigen zeigt. Der Zweck davon ist es, Linien zu zeichnen, die eine Umrisse zum Aufnehmen eines Bildes in diesen Grenzen bereitstellen. enter image description hereAndroid zeichnen Linie und ziehen Sie es dann mit Touch

Ich bin in der Lage, Linien wie diese zu zeichnen, die als Grenzen verwendet werden, um ein Bild aufzunehmen. Aber was ich will ist, dass ich nicht in der Lage bin, die Linie zu ziehen, die ich zeichne oder wenn ich die Linie nach dem Zeichnen skalieren möchte. Da man beim Zeichnen der Linien zur Zeit sehr vorsichtig sein muss, und leichte Abweichungen erfordern, mach es nochmal.

So kann mir jemand helfen, wie ich Drag-Listener online implementieren kann, wie man eine Linie als Objekt erstellt, das zuhören kann, wenn der Finger auf einer Linie berührt wird?

Danke, Irfan

@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

Fügen Sie Ihren Testcode hinzu –

Antwort

1

würde ich einen onTouchListener, dies zu tun. Hier ist ein Beispiel habe ich, wenn ich darüber lernte: Using OnTouchListener

Ich denke, das wichtigste, was Sie wollen, ist die Linie bei jeder MotionEvent.ACTION_MOVE zu aktualisieren und dann die Linie zu verlassen, wo es ist, wenn Sie einen MotionEvent.ACTION_UP

erhalten Hoffe das hilft!

+0

Wie Touch-Listener erkennen, dass der Benutzer auf die Zeile geklickt hat, wie eine Zeile auf der Leinwand gezeichnet wird, ist es eine feste Sache darauf. Woher weiß ich dann, dass die Zeile angeklickt wurde, und dann, wie die bereits Zeile gelöscht und an einen anderen Ort verschoben wird? –

+0

Ich würde sagen, überprüfen Sie diesen Link aus: Es hilft Ihnen, den Abstand zwischen dem Klick und eine Linie zu finden. https://en.wikipedia.org/wiki/Distance_from_a_point_to_a_line Dann, um es zu verschieben, müssen Sie den Bildschirm löschen und alles neu zeichnen, höchstwahrscheinlich. –

+0

Ich werde es überprüfen, danke! –