Wie kann ich einen path richtig zoomen?

  • 0 Antworten
  • Letztes Antwortdatum
H

HeroUser96

Ambitioniertes Mitglied
2
Hallo Leute,

ich stehe grade vor einem kleinen Problem. In meiner App soll der Benutzer selbst mit seinem Finger zeichnen können. Das gezeichnete soll dann sowohl verschiebbar, als auch vergrößer/verkleinerbar sein (ähnlich wie in vielen Zeichen-Apps, in denen man das "Papier" ja auch ranzoomen und verschieben kann).

Mit Hilfe verschiedener Tutorials habe ich es auch schon geschafft, Linien/Figuren, die zB mit Canvas.drawLine() erzeugt werden, richtig zu zoomen und zu verschieben. Nur bei der vom Benutzer gezeichneten Linie klappt das heranzoomen noch nicht.

Ich hab schon rechechiert und versuche jetzt die Punkte von dem Path neu zu berechnen, mit Berücksichtigung des scaleFactors. Die Linie bleibt zwar beim zoomen an der richtigen Position, wird aber nicht wie der Rest der gezeichneten Linien verkleinert. Außerdem wird scheinbar eine zusätzliche Linie gezeichnet, und zwar vom ersten Punkt von meinem Path zum letzten :confused2:

Hier ein paar Bilder zum verdeutlichen:
Vor dem zoomen:
LhszzvN.png
Nach dem zoomen:
H8Hp24P.png
(die roten Linien dienen nur zur Verdeutlichung wie groß der Path eigentlich sein sollte)

Außerdem noch meine onDraw() - Methode:
Code:
 @Override
		  protected void onDraw(Canvas canvas) {
			  super.onDraw(canvas);
			  
			  canvas.save();
			  canvas.scale(mScaleFactor, mScaleFactor);
			  drawCoordinateSystem(canvas, mPosX, mPosY);
			  if (drawMode == false) {
				  path.reset();
				  path.moveTo((lastTouchX/displayWidth) * (displayWidth/mScaleFactor) , (lastTouchY/displayHeight) * (displayHeight/mScaleFactor));
			  for (int i = 0; i <= pathPointsX.size() - 1; i++) {
				  float mPointX = (pathPointsX.get(i)/displayWidth) * (displayWidth/mScaleFactor);
				  float mPointY = (pathPointsY.get(i)/displayHeight) * (displayHeight/mScaleFactor);
	
			
				  path.lineTo(mPointX, mPointY);
				 
				  } 
			  
			  canvas.drawPath(path, paintL);
			  } else {
			  canvas.drawPath(path, paintL); }
			  canvas.restore();
			  
			  
		  }

Ich hoffe ihr könnt mir helfen, bin echt langsam am verzweifeln :s
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben Unten