2010-10-03 2 views
5

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

<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>  

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

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

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

+0

Привет, вы наконец поняли это? Меня будет интересовать решение. – dragoon

ответ

7

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

анимация выглядит следующим образом:

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

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

Рез/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> 

An Реализация Imate 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 (или любой Просмотреть дочерний класс):

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

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

Смежные вопросы