анимация ящика для выращивания андроида

Внутри строки ListView у меня есть поле (сейчас это изображение, но, вероятно, в какой-то момент я буду преобразовывать его в линейный или относительный объект макета). когда вы нажимаете на поле, у меня начинается анимация масштабирования, которая заставляет его расти. однако, как только анимация закончится, поле сразу же вернется в исходное состояние. Я хотел бы, чтобы коробка оставалась в преобразованном размере (по крайней мере, до тех пор, пока они не щелкнут по ней снова).

вот xml:

<scale
    android:fromXScale="1" android:toXScale="5"
    android:fromYScale="1" android:toYScale="1"
    android:pivotX="100%" android:pivotY="0%" android:fillAfter="true"
    android:duration="600" />


person Ben    schedule 02.07.2010    source источник


Ответы (2)


единственный способ, которым я смог это сделать, - изменить ширину поля в новом потоке каждые 1 мс. некрасиво, но казалось, что это единственный способ сохранить границы коробки. если вы найдете вариант, который использует анимацию f/w, пожалуйста, дайте мне знать...

вот код Рохан, не забудьте проголосовать за меня :)

    private void toggleMenu(final ViewHolder menu, final boolean doExpand) {
    final LayoutParams params = menu.actionMenu.getLayoutParams();
    final int originalWidth = params.width;

    Thread t = new Thread() {
        @Override
        public void run() {
            for (int i = 0; i < 200; i++) {
                if (doExpand) {
                    params.width = originalWidth + i;
                } else {
                    params.width = originalWidth - i;
                }
                menu.actionMenu.post(new Runnable() {

                    @Override
                    public void run() {
                        menu.actionMenu.requestLayout();

                    }
                });
                try {
                    Thread.sleep(1);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            menu.expandCollapseButton.post(new Runnable() {
                @Override
                public void run() {
                    if (doExpand) {
                        menu.expandCollapseButton
                                .setImageResource(R.drawable.monotone_arrow_right);
                    } else {
                        menu.expandCollapseButton
                                .setImageResource(R.drawable.monotone_arrow_leftpng);
                    }

                }
            });

            // menu.isExpanded = !menu.isExpanded;
        }
    };
    t.start();
}
person Ben    schedule 07.07.2010
comment
Не могли бы вы предоставить фрагмент кода того, как вы это реализовали. я имею в виду весь класс, если вы сделали это программно. Я тоже хочу реализовать то же самое и застрял между ними. - person Rohan K; 21.10.2010

хорошо, я заставил его работать ... вроде. Если я сделаю все это в коде и вызову setFillAfter, setFillBefore и setFillEnabled all = true, то, похоже, это сработает. единственная проблема заключается в том, что контур моего окна (у него есть фон, который можно рисовать с элементом <stroke>. Кажется, что отступ также растет, я бы хотел, чтобы он не рос...

person Ben    schedule 02.07.2010