Я расширил свой пользовательский класс с RelativeLayout
, добавив в него функциональности scale
и move
.Эти функции работают, но мне не нравится, как он движется на экране, и мне нужна помощь для его улучшения.Вот мой код:
public class GestureRelativeLayout extends RelativeLayout {
private ScaleGestureDetector mScaleDetector;
private GestureDetector mGestureDetector;
public GestureRelativeLayout(Context context) {
super(context);
init(context);
}
public GestureRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public GestureRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
mGestureDetector = new GestureDetector(context, new Gesture());
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
mScaleDetector.onTouchEvent(ev);
mGestureDetector.onTouchEvent(ev);
return true;
}
private class Gesture extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
setPivotX(e2.getX());
setPivotY(e1.getY());
} else {
setPivotX(e1.getX());
setPivotY(e2.getY());
}
return true;
}
}
private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
private float mScaleFactor = 1.f;
@Override
public boolean onScale(ScaleGestureDetector detector) {
mScaleFactor *= detector.getScaleFactor();
mScaleFactor = Math.max(1f, Math.min(mScaleFactor, 2.0f));
setScaleX(mScaleFactor);
setScaleY(mScaleFactor);
return true;
}
}
}
Чтобы переместить мой макет на экран, я расширил класс SimpleOnGestureListener
и переопределил его метод onScroll
.Итак, мне нужна помощь, чтобы изменить его и переместить в правую / левую / верхнюю / нижнюю части экрана, когда пользователь масштабировал изображение.Большое спасибо за вашу помощь!