我有一个布局,其中包含以相对布局排列的多个视图。此布局将在列表视图的适配器中膨胀。
现在我想分别为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设置动画。
答案 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
...它不关心其中的项目或项目正在做什么......这是来自特定于体系结构的透视