一个布局的滑入和滑出动画

6

我有一个 LinearLayout,我正在动态添加TextView和ImageView到该LinearLayout中,现在我已经为这些TextView和ImageView添加了OnClickListener。

我有一个包含10个项的ArrayList,在使用for循环获取每个值并显示它们,由于这是一款测验应用程序,我有下一个和上一个按钮,当我单击它们时,我从ArrayList中逐一显示项目。 现在我需要将滑入和滑出动画应用于此LinearLayout。

我看过这个:

链接1

链接2

而且我也尝试过这个。

slideIn = new TranslateAnimation(
    TranslateAnimation.RELATIVE_TO_PARENT, 1.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f);

slideIn.setDuration(500);
slideOut = new TranslateAnimation(
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, -1.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f,
    TranslateAnimation.RELATIVE_TO_PARENT, 0.0f);

slideOut.setDuration(500);

但是不起作用,请在此帮助。

编辑:

问题:我已经将其应用于线性布局,但当我点击下一个按钮时,当前问题将向左滑动并显示空白屏幕,然后它将滑入并显示下一个问题,但我希望当前问题一旦滑出,就应该紧接着下一个问题。


你如何将这个动画应用到你的视图中? - Passionate Androiden
是的,伙计,我已经将它应用到线性布局上了,但问题是当我点击下一个时,当前问题会向左滑动并出现一个空白屏幕,然后它会滑入并显示下一个问题,但我希望当前问题滑出后立即跟随下一个问题。 - Goofy
使用ViewFlipper并使用inanimation和out animation怎么样? - Passionate Androiden
在Flipper中仅使用两个布局,并动态更改当前不可见布局的内容。当用户点击下一个时,填充不可见布局并带有动画加载到前面。 - Passionate Androiden
@PassionateAndroiden,如果您不介意的话,能给我举个例子吗? - Goofy
显示剩余2条评论
2个回答

4

将此xml文件放置在res/anim/目录下

leftright.xml
这是用于左到右动画的文件:

  <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
    <translate android:fromXDelta="-100%" android:toXDelta="0%"
      android:fromYDelta="0%" android:toYDelta="0%"
     android:duration="700"/>
   </set>

在你的Java代码中使用这个

Handler handler = new Handler();
Runnable runnable = new Runnable(){
{
   public void run()
 {
   item[i].setInAnimation(AnimationUtils.loadAnimation(this,R.anim.leftright.xml));
   i=i+1;
   handler.postDelayed(this,5000);
 }
};handler.postDelayed(runnable,5000);

我该如何将动画应用到布局中?我无法将动画应用于单个项目,因为它必须先从ArrayList获取值,然后显示。 - Goofy
在下一次点击时,使用 setContentView(R.layout.View2) 更新您的视图,然后在您的类中执行以下操作: Intent iSecondLayout = new Intent(Activity.this, Activity.class); Activity.this.startActivity(iSecondLayout); Activity.this.overridePendingTransition(R.anim.lefttoright, R.anim.righttoleft); - mihirjoshi
在下一次按钮点击时,使用不同的布局再次调用该活动。请查看代码。我一遍又一遍地调用同一个类。 - mihirjoshi
或者就像有人说的那样,您可以使用ViewFlipper。 - mihirjoshi
我可以使用ViewFlipper,但问题在于要从ArrayList加载项目,并且我不知道如何处理两个布局。 - Goofy
只需将您尝试做的内容截图发送给我,我就可以看看我能做些什么。 - mihirjoshi

4
如果您的布局具有相同的内容,可以在视图翻转器中创建两个布局。首先加载数据并显示第一个视图。当用户点击“下一个”或“上一个”时,加载下一个视图,并保留标志以显示第二个视图,并使用动画显示它。
从现在开始,根据标志值加载适当的带数据的视图并调用shownext()函数。
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainFlipper = (ViewFlipper) findViewById(R.id.flipper);
    firstLayout = (LinearLayout) findViewById(R.id.layout1);
    secondLayout = (LinearLayout) findViewById(R.id.layout2);


    findViewById(R.id.btnPrevious).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            showPrevious();
        }
    });

    findViewById(R.id.btnNext).setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            showNext();
        }
    });

}

private void showNext() {
    mainFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_in_left));
    mainFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out_right));
    flip();
}

private void showPrevious() {
    mainFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_in_right));
    mainFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_out_left));
    flip();
}

private void flip() {
    if(isFirstVisible) {
        isFirstVisible = false;
        secondLayout.removeAllViews();
        secondLayout.addView(getTextView("Second"));
    } else {
        isFirstVisible = true;
        firstLayout.removeAllViews();
        firstLayout.addView(getTextView("First"));
    }
    mainFlipper.showNext();
}

private TextView getTextView(String txt) {
    TextView txtView = new TextView(this);
    txtView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    txtView.setText(txt);
    return txtView;
}

嘿,我按照你说的方法尝试了一下,但现在我无法删除我动态添加的视图,如果我使用removeallviews(),那么动画将无法工作。 - Goofy
是的,是的,经过尝试,我用ViewFlipper实现了它...非常感谢。现在的问题是如何增加动画速度,即滑入和滑出的速度? - Goofy
动画的速度可以通过减少动画XML中的持续时间值来增加。您是指这个吗? - Passionate Androiden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接