Android 带有翻译动画的 ViewFlipper - 无法正常工作

Android ViewFlipper with translation animation - not working properly

我想在我的应用程序中显示横幅(图像在 x 方向移动)。为此,我将 ViewFlipper 与翻译动画一起使用。请找到我下面的代码..

我的布局:banner.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
        <ViewFlipper
                android:id="@+id/banner_image"
                android:layout_width="match_parent"
                android:layout_height="258dp" />
</RelativeLayout>

动画中:in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >

  <translate
    android:duration="3000"
    android:fromXDelta="100%"
    android:fromYDelta="0%"
    android:toXDelta="0%"
    android:toYDelta="0%" />

</set>

出动画:out_to_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
  <translate android:fromXDelta="0%" android:toXDelta="-100%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="3000"/>
</set>

我的Java代码

public class BannerView extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.banner);
    
    ViewFlipper myViewFlipper = (ViewFlipper) findViewById(R.id.banner_image);
    
    //Setting first image in viewFlipper
    ImageView imageView1 = new ImageView(HomeView.this);
    imageView1.setImageDrawable(getResources().getDrawable(R.drawable.img1));
    myViewFlipper.addView(imageView1);

    //Setting second image in viewFlipper
    ImageView imageView2 = new ImageView(HomeView.this);
    imageView2.setImageDrawable(getResources().getDrawable(R.drawable.img2));
    myViewFlipper.addView(imageView2);
    myViewFlipper.setAutoStart(true);

    //Setting in and out animation
    myViewFlipper.setInAnimation(HomeView.this,R.anim.in_from_right);
    myViewFlipper.setOutAnimation(HomeView.this,R.anim.out_to_left);

    //Starting the view filpper to rotate
    myViewFlipper.startFlipping();
}
}

我的问题是,

当我将进出动画的持续时间设置为“5000”时,ViewFilpper 的行为发生如下变化,

图像开始缓慢移动并快速结束。

我不知道我哪里不见了。我想放慢速度。请帮我解决问题。

更新:我编写了一些示例代码,中途有一个很大的卡顿,好像第二个视图被强行移动以赶上第一个视图。经过多次试验和错误后,我发现在 viewflipper xml 属性中设置 android:flipInterval="5000" 可以修复它。我只能假设默认的 flipInterval 小于 5000,因此是问题所在。

 <ViewFlipper
        android:id="@+id/viewflipper"
        android:layout_width="match_parent"
        android:layout_height="258dp"
        android:flipInterval="5000" >

如果还是觉得动画不够流畅:

将此放入翻译动画的 xml 中:

android:interpolator="@android:anim/linear_interpolator"

然后

android:startOffset="1000" 

到 slide_out_to_left 所以它会稍等片刻再继续。

感谢您的回复。我找到了解决问题的方法。请在下面找到我的答案。

我在 xml 中更改了我的插值器,如下所示:

 android:interpolator="@android:anim/decelerate_interpolator"

然后我在取景器中使用 android:flipInterval="5000" 解决了我的问题。