afarber
Neues Mitglied
- 0
Guten Tag!
Ich bin ein Android-Anfänger und habe eine einfache App vorbereitet, in der man ein Spielfeld (Quellcode: MyView.java) scrollen und zoomen kann:
In meinem Listener ändere ich Skalierungsfaktor:
Und dann male ich meine Komponente:
Es funktioniert eigentlich gut - bis auf ein kleines Problem.
Beim Zoomen mit zwei Fingern vergrössert sich das Spielfeld-Bild um den (falschen) Punkt 0, 0.
Und das wirkt unnatürlich - als ob beim Zoomen das Bild unter den Fingern weggleiten würde.
Ich denke es handelt sich um ein verbreitetes Problem und wahrscheinlich ist die Lösung dazu sehr einfach (etwa die mOffsetX und mOffsetY in onScale-Methode anpassen? dazu eventuell scale-Variable oder auch detector.getFocusX() verwenden?) - nur habe ich sie noch nicht finden können...
Gruss aus Bochum
Alex
Ich bin ein Android-Anfänger und habe eine einfache App vorbereitet, in der man ein Spielfeld (Quellcode: MyView.java) scrollen und zoomen kann:
In meinem Listener ändere ich Skalierungsfaktor:
Code:
public boolean onScale(ScaleGestureDetector detector) {
mScale *= detector.getScaleFactor();
// XXX mOffsetX und mOffsetY anpassen - aber wie?
constrainZoom();
constrainOffsets();
invalidate();
return true;
}
Code:
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.translate(mOffsetX, mOffsetY);
canvas.scale(mScale, mScale);
gameBoard.setBounds(
0,
0,
gameBoard.getIntrinsicWidth(),
gameBoard.getIntrinsicHeight()
);
gameBoard.draw(canvas);
}
Beim Zoomen mit zwei Fingern vergrössert sich das Spielfeld-Bild um den (falschen) Punkt 0, 0.
Und das wirkt unnatürlich - als ob beim Zoomen das Bild unter den Fingern weggleiten würde.
Ich denke es handelt sich um ein verbreitetes Problem und wahrscheinlich ist die Lösung dazu sehr einfach (etwa die mOffsetX und mOffsetY in onScale-Methode anpassen? dazu eventuell scale-Variable oder auch detector.getFocusX() verwenden?) - nur habe ich sie noch nicht finden können...
Gruss aus Bochum
Alex