我不知道如何使用adapterViewflipper的动画。我在API13中,我在片段中使用适配器ViewFlipper。
所以在我的xml文件中,我只有:
<AdapterViewFlipper
android:id="@+id/avfPicturesSite"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@drawable/gradientbackground"
>
</AdapterViewFlipper>
并且我在getView()中动态创建ImageView。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
final ViewHolder viewHolder = new ViewHolder();
view = new ImageView(context);
viewHolder.img = (ImageView) view;
view.setTag(viewHolder);
} else {
view = convertView;
}
ViewHolder viewHolder = (ViewHolder)view.getTag();
viewHolder.img.setImageURI(getItem(position));
return view;
}
我用按钮浏览图像,尝试在其中设置动画。似乎站点PicturesFlipper.setInAnimation(上下文上下文,int resourceID)正在等待一个AnimatorSet。
nextSitePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
//sitePicturesFlipper.setInAnimation(R.animator.right_in);
sitePicturesFlipper.setInAnimation(getActivity(), R.anim.left_in);
sitePicturesFlipper.setOutAnimation(getActivity(), R.anim.right_out);
sitePicturesFlipper.showNext();
}
});
动画师们是这样宣布的:
left_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="-100%" android:toXDelta="0%"/>
<alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="100%"/>
<alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>
但当我点击按钮时,我会得到一个RuntimeException未知动画师名称:translate!
我也试着使用ObjectAnimator,比如:
nextSitePicture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
sitePicturesFlipper.setInAnimation(getActivity(), R.animator.left_in);
sitePicturesFlipper.setInAnimation(getActivity(), R.animator.right_out);
sitePicturesFlipper.showNext();
}
});
xml文件为:
left_in2.xml
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="yFraction"
android:valueType="floatType"
android:valueFrom="-1"
android:valueTo="0"
android:duration="600"/>
</set>
right_out2.xml:
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="yFraction"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="1"
android:duration="600"/>
</set>
但在这种情况下,我得到java.lang.ClassCastException:android.animation.AnimatorSet不能转换为android.anitation.ObjectAnimator
所以我不明白如何正确设置和使用它,在互联网上很难找到使用adapterViewFlipper的例子,除了泰语,但我对泰语不太熟悉。。。
那么,如何将动画与adapterViewFlipper一起使用呢?
好吧,我终于发现ObjectAnimator是用adapterViewFlipper声明动画的正确方法。不管怎么说,它不喜欢标签"<"set">"one_answers"<"/set">",至少在我写的时候是这样。我没有找到如何声明几个属性动画。我承认,我仍然有问题,以真正理解Android文档。。。
如果有人对此有想法,请等待信息。
因此,为了解决我遇到的第一个问题,一套完整的ObjectAnimator可以在适配器中左右滑动图像ViewFlipper是:
left_in.xml,在animator文件夹中声明
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1500"
android:valueTo="0"
android:duration="600"/>
right_out.xml
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="1500"
android:duration="600"/>
right_in.xml
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="1500"
android:valueTo="0"
android:duration="600"/>
left_out.xml
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="0"
android:valueTo="-1500"
android:duration="600"/>
然后使用动画:
myAdapterViewFlipper.setInAnimation(getActivity(), R.animator.right_in);
myAdapterViewFlipper.setOutAnimation(getActivity(), R.animator.left_out);
myAdapterViewFlipper.showNext();
或
myAdapterViewFlipper.setInAnimation(getActivity(), R.animator.left_in);
myAdapterViewFlipper.setOutAnimation(getActivity(), R.animator.right_out);
myAdapterViewFlipper.showPrevious();