ListView行中的动画可绘制

时间:2014-05-23 07:44:48

标签: android listview animation android-listview

我遇到了以下问题。我有一个ListView,其中每一行都是这样的

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:duplicateParentState="true" >

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="100dp"
    android:id="@+id/dashplayer"
    android:layout_centerHorizontal="true"
    android:focusable="false"
    android:clickable="false"
    android:tag="1"
    android:src="@android:color/transparent"
   android:layout_below="@+id/name"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="10dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Camera name"
    android:id="@+id/name"
    android:textColor="@android:color/white"
    android:layout_marginTop="10dp"
    android:layout_centerHorizontal="true" />
</RelativeLayout>

到目前为止一直很好,然后我有一个getView方法的适配器:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    final String name = getItem(position);
    LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = li.inflate(R.layout.dash_row, parent, false);
    ImageView iv=(ImageView) convertView.findViewById(R.id.dashplayer);

    if(!cameras.get(position).isActive()){
        iv.setImageResource(R.drawable.noise);  // HERE COMES THE ANIMATION
    }else{
        iv.setImageBitmap(cameras.get(position).getCurrentFrame()); //static bitmap, works fine
    }
   return convertView;
}

首先,它膨胀上面给出的xml,然后将ImageView放入动画可绘制或静态位图。位图运行良好,但问题在于动画。 它在xml中定义如下:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/frame0" android:duration="80" />
<item android:drawable="@drawable/frame1" android:duration="80" />
<item android:drawable="@drawable/frame2" android:duration="80" />
<item android:drawable="@drawable/frame3" android:duration="80" />
<item android:drawable="@drawable/frame4" android:duration="80" />
<item android:drawable="@drawable/frame5" android:duration="80" />
<item android:drawable="@drawable/frame6" android:duration="80" />
</animation-list>

让我感到困扰的是,动画在一段时间后停止了(可能是我打电话给notifyDatasetChanged,但我不确定这一点)。滚动列表后,它再次开始播放。我也可以通过调用listView.scrollListBy(0);(或旧版API中类似的东西)来播放它,但动画仍然有些不稳定。

有谁有任何想法,为什么动画会停止?

1 个答案:

答案 0 :(得分:0)

iv.setBackground(getResources().getDrawable(R.drawable.noise));
//depending on your android version code, setBackgroundDrawable in older versions
AnimationDrawable animationDrawable = (AnimationDrawable) iv.getBackground();

animationDrawable.setVisible(true,true)代替animationDrawable.start(),它会正常工作