动画从fill_parent到wrap_content的视图宽度?

时间:2013-10-20 01:37:05

标签: java android

我正在寻找我拥有的视图。它是一个listview项,所以当它出现在列表中时,它具有android:layout_width属性的fill_parent值。有了这个,它就填充了listview的整行。我想要发生的是,一旦将项目添加到列表中,我希望将layout_width动画化为wrap_content值。我知道只需更改LayoutParams即可完成,但不会动画。我在谈论的内容很好地参考了Google Hangouts应用。将项目添加到对话列表后,该项目将缩放为listview项目上的wrap_content。有没有人知道图书馆或某些可能指向我正确方向的东西?

3 个答案:

答案 0 :(得分:0)

您只需制作自己的列表视图项目布局并在其中包含一个文本视图,然后您就可以管理列表项的显示方式,请参阅Android listview customizationCustomizing list item throught ArrayAdapter和{{3} }

答案 1 :(得分:0)

您无法更改布局并同时为其设置动画,但您可以执行以下操作: 您的商品布局必须包含ViewSwitcherViewSwitcher个放置两个孩子,两个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)

如果您知道要为其设置动画的确切整数值(或dpemdip%值),则可以使用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延伸。