分别在列表视图的元素内动画文本视图

时间:2014-08-08 09:06:41

标签: android listview animation

我有一个布局,其中包含以相对布局排列的多个视图。此布局将在列表视图的适配器中膨胀。

现在我想分别为listview的每个元素设置动画(不是元素本身,而是在其中的textview),例如在onClick事件上。动画应包括文本视图的过渡和另一个视图的淡入淡出。

我这里真的没有想法。我有我的ArrayList of Objects,它包含了listview元素的数据。这个ArrayList被赋予填充文本视图的适配器。

我想我现在需要一种方法来接近文本视图。但是我该怎么做?我摆弄了Adapter类的getView方法,没有任何成功。在适配器/ arraylist中获取被点击元素的位置完全没有问题。 任何理想/不同的方法?

我尝试在我的适配器中附加一个ObjectAnimator,如下所示:

ObjectAnimator animation = ObjectAnimator.ofFloat(holder.txtPlayerPoints,"x", 200);
animation.setDuration(2000);
holder.txtPlayerPoints.setTag(R.id.tag_animation_in,animation);

在我的onClick中,我试图像这样启动它:

((ObjectAnimator ) textView.getTag(R.id.tag_animation_in)).start();

对textView的引用是正确的,但它没有移动。调试器还说" mTag"我的textView的属性是" null"。有什么建议吗?

编辑:这里是每个元素的布局:

<?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="wrap_content"
android:layout_marginBottom="10dp">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="@dimen/bar_upper_height"
    android:paddingLeft="@dimen/bar_name_padding"
    android:text="Hendrik"
    android:textSize="@dimen/font_player_name"
    android:id="@+id/txtNamePlayer"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@color/txt_default"
    android:textStyle="bold"
    android:textColor="@android:color/white"
    android:gravity="center_vertical" />

<TextView
    android:layout_width="@dimen/bar_rank_width"
    android:layout_height="@dimen/bar_rank_height"
    android:layout_marginLeft="@dimen/bar_upper_margin"
    android:layout_marginBottom="@dimen/bar_upper_margin"
    android:textSize="@dimen/font_bar_info"
    android:text="1"
    android:id="@+id/txtRankPlayer"
    android:layout_alignLeft="@id/txtNamePlayer"
    android:layout_alignBottom="@id/txtNamePlayer"
    android:background="@android:color/white"
    android:textStyle="bold"
    android:textColor="@color/txt_default"
    android:gravity="center_vertical|center_horizontal" />

<ImageView
    android:layout_width="@dimen/bar_arrow_width"
    android:layout_height="@dimen/bar_rank_height"
    android:id="@+id/imgActivePlayer"
    android:layout_toRightOf="@id/txtRankPlayer"
    android:layout_marginLeft="@dimen/bar_upper_margin"
    android:layout_alignBottom="@id/txtNamePlayer"
    android:layout_marginBottom="@dimen/bar_upper_margin"
    android:background="@drawable/active_player" />

<TextView
    android:layout_width="@dimen/bar_rank_height"
    android:layout_height="@dimen/bar_rank_height"
    android:layout_marginRight="@dimen/bar_upper_margin"
    android:layout_marginBottom="@dimen/bar_upper_margin"
    android:text="12"
    android:id="@+id/txtPointsPlayer"
    android:layout_alignRight="@id/txtNamePlayer"
    android:layout_alignBottom="@id/txtNamePlayer"
    android:background="@android:color/white"
    android:textStyle="bold"
    android:textColor="@color/txt_default"
    android:textSize="@dimen/font_bar_info"
    android:gravity="center_vertical|center_horizontal" />

<TextView
    android:layout_width="@dimen/bar_rank_height"
    android:layout_height="@dimen/bar_rank_height"
    android:layout_marginRight="@dimen/bar_upper_margin"
    android:layout_marginBottom="@dimen/bar_upper_margin"
    android:layout_toLeftOf="@id/txtPointsPlayer"
    android:layout_alignBottom="@id/txtNamePlayer"
    android:text="0"
    android:id="@+id/txtCurrScorePlayer"
    android:background="@color/txt_disabled"
    android:textColor="@android:color/white"
    android:textSize="@dimen/font_bar_info"
    android:gravity="center_vertical|center_horizontal" />

<LinearLayout
    android:orientation="horizontal"
    android:id="@+id/aheadBehindPlayer"
    android:layout_width="fill_parent"
    android:layout_height="@dimen/bar_lower_height"
    android:layout_below="@+id/txtNamePlayer"
    android:layout_centerHorizontal="true"
    android:background="@color/txt_disabled"
    android:gravity="center_vertical"
    android:paddingLeft="20dp"
    android:paddingRight="20dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ahead"
        android:textSize="@dimen/font_bar_info"
        android:textColor="@android:color/white"
        android:id="@+id/textView2"
        android:layout_weight="1"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="15"
        android:textSize="@dimen/font_bar_info"
        android:textColor="@android:color/white"
        android:id="@+id/txtPlayerAhead"
        android:layout_weight="5"
        android:textStyle="bold" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="15"
        android:textColor="@android:color/white"
        android:textSize="@dimen/font_bar_info"
        android:id="@+id/txtPlayerBehind"
        android:textStyle="bold"
        android:gravity="right"
        android:layout_weight="5" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/behind"
        android:textColor="@android:color/white"
        android:textSize="@dimen/font_bar_info"
        android:id="@+id/textView5"
        android:gravity="right"
        android:layout_weight="1" />

</LinearLayout>

</RelativeLayout>

我想为txtPointsPLayer和txtCurrScorePlayer设置动画。

2 个答案:

答案 0 :(得分:0)

只需将ObjectAnimator附加到每个视图(使用setTag()),然后在onClick期间检索它。要创建动画师,您可以执行以下操作:

  // Animate X from 0 to 200
  ObjectAnimator animation2 = ObjectAnimator.ofFloat(myview,"x", 200);
  animation2.setDuration(2000);
  myview.setTag(animation2)

然后在onClick期间,您会获得对它的引用并启动它

 ((ObjectAnimator ) myview.getTag()).start()

希望它有所帮助。

答案 1 :(得分:0)

我想这是基于意见的。即使我不是Android专家,我相信无论你选择何种方法,你仍然需要在TextView内获得每个ListView的引用,指定OnClickListener并开始动画。因此,我通过创建一个从TextView类扩展的自定义视图来保持我的活动/片段被特定于子视图的逻辑所污染的方式解决这个问题。将定义与此TextView相关的所有内容。所以,基本上,活动/片段只需知道ListView ...它不关心其中的项目或项目正在做什么......这是来自特定于体系结构的透视