我目前有一个附有页眉和页脚的列表视图。我现在正在尝试为列表中的项目设置动画,但是当我将LayoutAnimationController
应用于列表视图时,标题也会动画化。有没有办法将动画应用到整个列表而不影响标题?
我目前已经在Can LayoutAnimationController animate only specified Views尝试了解决方案,方法是创建一个检查动画的LinearLayout子类,但标题仍然是其余项目的动画。
public class AnimationAverseLinearLayout extends LinearLayout {
private boolean mIsAnimatable = true;
public AnimationAverseLinearLayout(Context context) {
super(context);
}
public AnimationAverseLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setAnimatable(boolean isAnimatable) {
if(!isAnimatable)
clearAnimation();
mIsAnimatable = isAnimatable;
}
@Override
public void startAnimation(Animation animation) {
if(mIsAnimatable) {
super.startAnimation(animation);
}
}
}
...
//in onCreateView
ListView listView = (ListView) v.findViewById(android.R.id.list);
listView.setLayoutAnimation(Animations.animateListView(listView.getContext()));
header = (com.yardi.hud.inspections.util.AnimationAverseLinearLayout) inflater.inflate(R.layout.fragment_case_search_header, null, false);
header.setAnimatable(false);
listView.addHeaderView(header);
...
SearchAdapter adapter = new SearchAdapter(results);
setListAdapter(adapter);
答案 0 :(得分:1)
我遇到了上面描述的相同问题 - 动画正在应用于ListView标题以及列表行。我在this answer的帮助下解决了这个问题。我将标题的最外层视图(在我的例子中是一个FrameLayout)子类化,并覆盖了动画方法,不采取任何操作。例如:
list_header.xml:
<my.project.NonAnimatingFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
...
>
<!-- other views in your header -->
...
</my.project.NonAnimatingFrameLayout>
和
package my.project
public class NonAnimatingFrameLayout extends FrameLayout {
...
@Override
public void setAnimation(Animation animation) {
// do nothing
}
您需要覆盖我的动画方法因最外层视图的类型而异。
答案 1 :(得分:0)
不是最好的解决方案,但它可以替代例如:
LinearLayout
垂直方向)ListView
我的意思是,页眉和页脚将独立于您的列表组件,并且可以快速修复。不是吗?您仍然可以控制页眉/页脚可见性,例如,只需将可见性设置为View.GONE
。
也是1 ,您还可以实施其他方法吗?我的意思是,canAnimate
或类似的东西?
同样2 ,您的getView
方法是如何实施的。
简单提供一下我所解释的内容:
<!-- Scrollable container -->
<ScrollView
android:id="@+id/scrollContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Container view -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/list"
android:orientation="vertical">
<!-- Header view -->
<TextView
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/header_text" />
<!-- LinearLayout acting as ListView -->
<LinearLayout
android:orientation="vertical"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Insert rows into the fake list -->
<TextView
android:id="@+id/row_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/row_item" />
</LinearLayout>
<!-- Footer view -->
<TextView
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/footer_text" />
</LinearLayout>
</ScrollView>
我相信问题现在已经解决了:)
答案 2 :(得分:0)
如果您只想查看此xml文件,我会尝试这样做
我声明页眉和页脚分开&amp;如果你想要你可以动画列表视图,Listview分开。页眉和页脚不会生成动画。
如果你给页眉和页脚Animate那么它也会动画......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Header aligned to top -->
<RelativeLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="#FC9"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Fixed Header"
android:textColor="#000"
android:textSize="20sp" />
</RelativeLayout>
<!-- Footer aligned to bottom -->
<RelativeLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#FC0"
android:gravity="center" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="Fixed Footer"
android:textColor="#000"
android:textSize="20sp" />
</RelativeLayout>
<!-- LIstview Item below header and above footer -->
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/footer"
android:layout_alignParentLeft="true"
android:layout_below="@+id/header" >
</ListView>
</RelativeLayout>