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" 解决了我的问题。
我想在我的应用程序中显示横幅(图像在 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" 解决了我的问题。