我正在寻找我拥有的视图。它是一个listview项,所以当它出现在列表中时,它具有android:layout_width属性的fill_parent值。有了这个,它就填充了listview的整行。我想要发生的是,一旦将项目添加到列表中,我希望将layout_width动画化为wrap_content值。我知道只需更改LayoutParams即可完成,但不会动画。我在谈论的内容很好地参考了Google Hangouts应用。将项目添加到对话列表后,该项目将缩放为listview项目上的wrap_content。有没有人知道图书馆或某些可能指向我正确方向的东西?
答案 0 :(得分:0)
您只需制作自己的列表视图项目布局并在其中包含一个文本视图,然后您就可以管理列表项的显示方式,请参阅Android listview customization
,Customizing list item throught ArrayAdapter
和{{3} }
答案 1 :(得分:0)
您无法更改布局并同时为其设置动画,但您可以执行以下操作:
您的商品布局必须包含ViewSwitcher
内ViewSwitcher
个放置两个孩子,两个RelativeLayout
,一个包含您的商品展开视图,另一个包含折叠视图。像这样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!- Change the in and out animation for some scale animation ->
<ViewSwitcher
android:id="@+id/viewswitcher"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:inAnimation="@android:anim/slide_in_left"
android:outAnimation="@android:anim/slide_out_right" >
<RelativeLayout
android:id="@+id/expanded_item"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/editText_expanded"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10"
android:text="TextExpanded" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/collapsed_item"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/editText_collapsed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:text="TextCollapsed" >
</TextView>
</RelativeLayout>
</ViewSwitcher>
</RelativeLayout>
现在我不知道你什么时候想要执行动画。您有两个选择:一个在onFocus事件上执行动画。两个采用您的视图实例并使用post(someRunnable)
执行动画。如果您选择第一个,则当用户向下滚动并查看该项目时将执行动画,即使该项目是很久以前添加的,但该项目从未赢得焦点。如果您选择第二个选项,则在添加新元素时将执行动画(我按下),如果您实际上没有看到该项,则无关紧要。我不太确定最后一个,因为getView
的{{1}}是以懒惰的方式执行的。您的适配器必须是这样的:
BaseAdapter
嗯,你必须玩这个,看看会发生什么。对不起,我不能给你一个100%准确的答案。但我确信这是要走的路。希望它有所帮助:]
顺便说一下,这个问题非常好!答案 2 :(得分:0)
如果您知道要为其设置动画的确切整数值(或dp
,em
,dip
,%
值),则可以使用droidQuery库可以做到这一点。只需使用以下命令:
$.with(myView).animate("{width: " + widthValue /* must be an int */ + "}", new AnimationOptions().duration(1000).easing($.Easing.ACCELERATE_DECELERATE));
默认情况下, AnimationOptions
的持续时间为400毫秒,线性缓动。您还可以设置动画成功完成时要调用的函数,例如:
new AnimationOptions().success(new Function() {
@Override
public void invoke($ d, Object... args) {
//TODO
}
});
如果要使用百分比或dp等,只需将其添加到animate String即可。例如,对于50%宽度,请使用:
$.with(myView).animate("{width: 50%}", new AnimationOptions());
但请注意,这可能会导致ListView
出现问题,因为其LayoutParams
不会从ViewGroup.LayoutParams
延伸。