Android 2.3: анимация представления? - PullRequest
1 голос
/ 10 июля 2011

Как вы можете изменить координаты вида во время его анимации? Например, если я делаю перевод вида на экран слева направо, я хочу, чтобы вид сдвигал все вправо от него в процессе его перемещения?

public Animation expandHiddenPanel(final View v, final boolean expand) {
    panelExpanded = expand;
    v.measure(MeasureSpec.makeMeasureSpec(200, MeasureSpec.AT_MOST), 
              MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    final int initialWidth = v.getMeasuredWidth();
    Log.i("test", "initialWidth = " + initialWidth);

    v.getLayoutParams().width = 0;
    v.setVisibility(View.VISIBLE);

    Animation a = new Animation() {
        @Override
        protected void applyTransformation(float interpolatedTime, Transformation t) {
            int newWidth;

            if (expand) {
                newWidth = (int)(initialWidth * interpolatedTime);
                Log.i("test", "new Width = " + newWidth);
            }
            else {
                newWidth = (int)(initialWidth * (1 - interpolatedTime));
                Log.i("test", "new Width = " + newWidth);
            }

            v.getLayoutParams().width = newWidth;
            v.requestLayout();
        }

        @Override
        public boolean willChangeBounds() {
            return true;
        }
    };

    a.setInterpolator(new AccelerateInterpolator());
    a.setDuration(2500);
    a.setFillAfter(true);
    v.startAnimation(a);

    return a;
}

1 Ответ

2 голосов
/ 12 июля 2011

Я исправил это, наложив основной макет поверх моей панели, поместив кнопку в верхнем левом углу моего основного макета и изменив код, который я разместил выше, чтобы заполнить левый край моего основного макета, чтобы открыть панель.

Чтобы получить эффект скользящего ящика, я изменил видимость панели и применил анимацию перевода, которая работала в течение той же продолжительности и использовал тот же интерполятор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...