Я пытаюсь нарисовать изображение на масштабированном холсте, где пользователь коснулся экрана, но он рисовал изображение с неправильным масштабом. Я использую пользовательский масштаб слушателя масштабировать холст в соответствии с предложением here:Нарисовать изображение на масштабированном холсте
public class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
private float lastFocusX;
private float lastFocusY;
public ScaleListener() {
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
lastFocusX = detector.getFocusX();
lastFocusY = detector.getFocusY();
return true;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
Matrix transformatioMatrix = new Matrix();
float focusX = detector.getFocusX();
float focusY = detector.getFocusY();
transformatioMatrix.postTranslate(-focusX, -focusY);
transformatioMatrix.postScale(detector.getScaleFactor(), detector.getScaleFactor());
float focusShiftX = focusX - lastFocusX;
float focusShiftY = focusY - lastFocusY;
transformatioMatrix.postTranslate(focusX + focusShiftX, focusY + focusShiftY);
backgroundMatrix.postConcat(transformatioMatrix);
lastFocusX = focusX;
lastFocusY = focusY;
return true;
}
}
и SimpleOnGestureListener прокрутки и нарисовать изображение
public class ScrollListener extends GestureDetector.SimpleOnGestureListener{
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
Toast.makeText(context, "onSingleTapUp", Toast.LENGTH_SHORT).show();
playersCanvas.drawBitmap(playerBitmap, touchX, touchY, canvasPaint);
invalidate();
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
backgroundMatrix.postTranslate(-distanceX, -distanceY);
invalidate();
return true;
}
}
это мой OnDraw:
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(background, backgroundMatrix, canvasPaint);
canvas.drawBitmap(playersBitmap, backgroundMatrix, canvasPaint);
}
Теперь, когда я касаюсь экрана, изображение рисует на холсте, но не там, где я касался, а не в правильном масштабе. Например: Это оригинальный фон:
После того масштаба и прокрутки я прикоснулся к экрану в красной окружности местоположении (добавляется после), и изображение было обращено в правом нижнем углу
И после того, как сворачивает к исходному размеру вы можете увидеть неправильное расположение на холсте:
я нашел this нити, предположит, что у меня есть точка шкалы, которая я не из-за «свободные» с cale и scroll.
Как я могу нарисовать изображение в правильном положении с правильной шкалой?
использование 'Matrix.mapPoints()' – pskink
спасибо !! этот намек приведет меня к ответу. –
приветствуется ... – pskink