0

我有一个列表视图,其中包含一个图标、一个标题和一个副标题。

我的老板问我他想把那个图标改成动画。当他的意思是动画时,它只是显示三个图像继续,使它看起来像动画。

我已经通过在 res/anim 文件夹中编写一个 xml 来制作动画:

<?xml version="1.0" encoding="UTF-8"?>
<animation-list android:oneshot="false"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:duration="150" android:drawable="@drawable/icon_anmi_1"/>
    <item android:duration="150" android:drawable="@drawable/icon_anmi_2" />
    <item android:duration="150" android:drawable="@drawable/icon_anmi_3" />
</animation-list>

并通过在 value 文件夹中编写另一个进度条样式:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <style name="animStyle" parent="@android:style/Widget.ProgressBar.Small">
        <item name="android:indeterminateDrawable">@anim/icon_anim</item>
    </style>
</resources>  

我使用进度条,因为图标应该自动启动动画。它确实如此。此外,在我的列表适配器的 xml 布局中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="60dip"
 android:padding="10dip"
 >

<ProgressBar android:id="@+id/itemIcon" style="@style/animStyle"
        android:layout_width="60px" 
        android:layout_height="60px"
         android:layout_marginRight="10dip"
    android:layout_alignParentLeft="true" />
 <TextView
 android:id="@+id/itemInfo"
 android:layout_width="240dp"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/itemIcon"
 android:gravity="center_vertical"
 android:textSize="18sp"
 android:textStyle="bold"
 android:ellipsize="marquee" android:singleLine="true"/>
 <TextView
 android:id="@+id/subtitle"
 android:layout_width="240dp"
 android:layout_height="wrap_content"
 android:layout_toRightOf="@+id/itemIcon"
 android:gravity="center_vertical"
 android:textSize="10sp"
 android:ellipsize="marquee" android:singleLine="true" android:layout_below="@+id/itemInfo"/>
</RelativeLayout>

在将适配器绑定到列表项时,我还对代码进行了更改:

adapterForList= new SimpleAdapter(this, hashMapListForListView, R.layout.s_item, new String[]{"imageUri","title","subtitle"},new int[]{R.id.itemIcon,R.id.itemInfo,R.id.subtitle});
        adapterForList.setViewBinder(new SimpleAdapter.ViewBinder() {
            public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
                if (view.getId() == R.id.itemIcon) {
                    //Not need progress
                    //int value = Integer.parseInt(data.toString());
                    //((ProgressBar) view).setProgress(value);
                    return true;
                }
                return false;
            }
        });

        lv.setAdapter(adapterForList);

动画效果很好。我现在面临的唯一问题是我为动画放置的图像无法调整为正确的大小。它只能显示它的一部分。我想知道是否有办法让我定义要显示的图像的大小,以便它可以像图像视图一样工作。

谢谢!

4

1 回答 1

0

这可以通过各种技术来解决,具体取决于目标平台。如果您的目标是 API 11 或更高版本,ViewFlipper 可以改为执行动画。

但是,当您尝试对动画使用 ProgressBar 解决方案时,我想您也针对的是旧版本的 Android。在这些情况下,可以通过恢复到 ImageView 并从计时器设置图像的可绘制来解决问题。

该技术在https://stackoverflow.com/a/14991972/1950496中进行了描述,并且可以进行修改以适应 RemoteViews 问题。

于 2013-04-20T14:51:04.213 回答