Добавление анимации в ListView для расширения / свертывания контента - PullRequest
5 голосов
/ 04 октября 2010

У меня есть представление списка, в котором используется пользовательский адаптер для отображения моего пользовательского содержимого.Его компоновка следующая.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1">
        <ImageView
            android:id="@+id/itemimage"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="5"
            android:scaleType="fitCenter"/>
        <TextView
            android:id="@+id/itemdescription"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="10dp"
            android:textSize="16sp"
            android:layout_weight="1"/>
    </LinearLayout>    
    <TextView
            android:id="@+id/itemtext"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="TEXT CONTENT"
            android:layout_weight="1"/>
</LinearLayout>    

Мне бы хотелось, чтобы в виде списка отображался только вид с идентификатором элемента и описанием элемента, при этом текст элемента скрыт.Идея состоит в том, чтобы иметь onclicklistener для каждого элемента списка, чтобы развернуть этот элемент так, чтобы он отображал содержимое элемента text.Я знаю, что должен использовать анимацию анимации, чтобы развернуть / свернуть каждый элемент, но я не могу понять, как это сделать.

Может ли кто-нибудь помочь мне с этим?Если вам нужно больше фрагментов кода, не стесняйтесь спрашивать.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 14 мая 2012

Для этого я создал класс Animation, который анимирует поля до отрицательных значений, заставляя элемент исчезать.

Анимация выглядит так:

public class ExpandAnimation extends Animation {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
    super.applyTransformation(interpolatedTime, t);

    if (interpolatedTime < 1.0f) {

        // Calculating the new bottom margin, and setting it
        mViewLayoutParams.bottomMargin = mMarginStart
                + (int) ((mMarginEnd - mMarginStart) * interpolatedTime);

        // Invalidating the layout, making us seeing the changes we made
        mAnimatedView.requestLayout();
    }
}
}

У меня есть целый пример приложения для этой анимации в моем блоге post

0 голосов
/ 30 сентября 2015

Пробовал решение Udinic, но, наконец, выбрал эту альтернативу:

res / anim / scale_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<scale
    android:duration="700"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="0%"
    android:toXScale="1.0"
    android:toYScale="0.0" />
</set>

Реализация Animate ListView:

protected void animateView(final View v, final int animResId, final int endVisibility){
    Animation anim = AnimationUtils.loadAnimation(getApplicationContext(),
            animResId);
    anim.setAnimationListener(new Animation.AnimationListener() {
        public void onAnimationStart(Animation animation) {
            v.setVisibility(View.VISIBLE);
        }
        public void onAnimationEnd(Animation animation) {
            v.setVisibility(endVisibility);
        }
        public void onAnimationRepeat(Animation animation) {}
    });
    v.startAnimation(anim);
}

Примеры вызовованимировать мой ListView (или любой дочерний класс View):

animateView(listView1, R.anim.scale_down, View.GONE);
animateView(listView1, R.anim.scale_up, View.VISIBLE);

Он работает на моем телефоне KitKat.

...