【发布时间】:2014-12-25 07:05:59
【问题描述】:
我正在尝试用Flip animation 显示我的每个listview 项目的正面和背面。动画效果很好,但动画的结果也被应用于其他项目。此外,当我向上和向下滚动时,我的项目的位置会发生变化。我的代码如下:
public View getView(final int position, final View convertView, ViewGroup parent) {
ArtItemHolder holder;
View view = convertView;
if (view == null) {
LayoutInflater inflater = ((Activity) this.context).getLayoutInflater();
holder = new ArtItemHolder();
view = inflater.inflate(R.layout.feed_list_item, parent, false);
holder.image = (ImageView) view.findViewById(R.id.img_Image);
holder.pubDate = (TextView) view.findViewById(R.id.txt_puslishDate);
holder.arTitle = (TextView) view.findViewById(R.id.txt_arTitle);
holder.commentCount = (TextView) view.findViewById(R.id.txt_commentCount);
holder.rotator = (ImageView) view.findViewById(R.id.card_roretor);
holder.cardFace = view.findViewById(R.id.card_face);// first of 2 child parent layout of feed_list_item.xml
holder.cardBack = view.findViewById(R.id.card_back);// second of 2 child parent layout of feed_list_item.xml
view.setTag(holder);
} else {
holder = (AdvItemHolder) view.getTag();
}
holder.rotator.setOnClickListener(new MyFlipperListener(view, holder.cardFace, holder.cardBack));
return view;
}
private class MyFlipperListener implements OnClickListener{
View parent, frontFace, backFace;
public MyFlipperListener(View parent, View frontFace, View backFace) {
this.parent = parent;
this.frontFace = frontFace;
this.backFace = backFace;
}
public void onClick(View v) {
FlipAnimation flipAnimation = new FlipAnimation(frontFace, backFace);
if (frontFace.getVisibility() == View.GONE)
{
flipAnimation.reverse();
}
parent.startAnimation(flipAnimation);
}
}
private static class ArtItemHolder{
ImageView image;
TextView pubDate;
TextView arTitle;
TextView commentCount;
ImageView rotator;
View cardFace, cardBack;
}
我的列表视图中项目的布局 xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:id="@+id/card_face"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/feed_item_selector"
android:layout_margin="8dip"
android:padding="2dip">
########## MAIN CONTENT HERE ###########
</LinearLayout>
<LinearLayout
android:id="@+id/card_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/feed_item_selector"
android:layout_margin="8dip"
android:padding="2dip"
android:visibility="gone">
########## SOME INFO ABOUT MAIN CONTENT HERE ###########
</LinearLayout>
</LinearLayout>
更新
FlipAnimation flipAnimation = new FlipAnimation(holder.cardFace, holder.cardBack);
holder.rotator.setOnClickListener(new MyFlipperListener(view, holder.cardFace, flipAnimation));
private class MyFlipperListener implements OnClickListener{
View parent, frontFace;
FlipAnimation flipAnimation;
public MyFlipperListener(View parent, View frontFace, FlipAnimation flip) {
this.parent = parent;
this.frontFace = frontFace;
this.flipAnimation = flip;
}
public void onClick(View v) {
if (frontFace.getVisibility() == View.GONE){
flipAnimation.reverse();
}
parent.startAnimation(flipAnimation);
}
}
【问题讨论】:
-
尝试将您的构造函数更改为
public MyFlipperListener(View parent, View frontFace,FlipAnimation flipAnimation),这样您就知道该做什么或如何去做,如果您的构造函数看起来如此......并在 if view is null 子句中实例化您的翻转动画......意思是把翻转动画放在artitemholder中..我的建议可能很棒或很糟糕..试试吧..让我知道 -
@Elltz 结果相同。更新我的问题只是为了告诉你我做了什么。
-
好的,让我在发布答案之前问你几个问题,你是在翻转整个项目视图吗?还是只是图像视图的holder.rotator?其次,我认为您正在为 imageview 捕获 onclicklistener 对吗?
-
我插入了我的布局 xml。请看一下。
-
@eskimoo:嗨,你找到任何解决方案了吗?我正在尝试同样的问题并遇到同样的问题,但找不到任何解决方案。请帮忙。
标签: android android-listview android-animation