Я пытаюсь анимировать представление для увеличения при касании и уменьшения при касании. Ниже приведены мои объявления анимации:
scale_up.xml
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="500"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toXScale="1.5"
android:toYScale="1.5" />
scale_down.xml
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="500"
android:fromXScale="1.5"
android:fromYScale="1.5"
android:toXScale="1.0"
android:toYScale="1.0" />
Затем я использую метод onTouch SurfaceHolder для доступа к MotionEvents:
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
mView.startAnimation(mScaleUp);
mView.invalidate();
// Intentional fall-through
case MotionEvent.ACTION_MOVE:
float[] focusCoords = translatePointerCoords(this, event);
mView.setX(focusCoords[0] - mView.getWidth() / 2);
mView.setY(focusCoords[0] - mView.getHeight() / 2);
mView.invalidate();
mView.requestLayout();
break;
case MotionEvent.ACTION_UP:
mView.startAnimation(mScaleDown);
mView.invalidate()
break;
}
}
public static float[] translatePointerCoords(View view, MotionEvent event) {
final int index = event.getActionIndex();
final float[] coords = new float[] { event.getX(index), event.getY(index) };
Matrix matrix = new Matrix();
view.getMatrix().invert(matrix);
matrix.postTranslate(view.getScrollX(), view.getScrollY());
matrix.mapPoints(coords);
return coords;
}
Вид mView
имеет разрешение 120dp x 120dp и изначально отрисовывается в позиции (0, 0). Если анимация отключена, я вижу, как вид перетаскивается под мой искатель. Однако, когда анимация включена, при касании пальцем вниз я вижу, что изображение увеличивается, но также смещается в нижнем правом направлении. Оказывается, если я поднесу палец к координатам родителя (0, 0), вид не сместится. Это означает, что pivotX и pivotY каким-то образом либо игнорируются, либо каким-то образом кэшируются со старой позицией представления, когда я загружаю анимацию. Кроме того, когда я начинаю двигать пальцем, я вижу, что масштабированное изображение искажается и все перепуталось:
Основываясь на всем этом, я понял, что анимация движения с подвижными/динамическими представлениями не предназначена для совместного воспроизведения. Должен ли я использовать анимацию свойств? Это то, что обычно используется для выполнения таких задач?
Спасибо за любой совет!