【问题标题】:Slide In and Slide Out animation for a layout布局的滑入和滑出动画
【发布时间】:2019-03-14 20:09:33
【问题描述】:

我有一个LinearLayout, I am dynamically adding TextView, ImageView to that LinearLayout,现在我已将 OnClickListener 添加到这些 TextView 和 ImageView 中。

我有一个数组列表,其中有 10 个项目,使用 for 循环我获取每个值并显示,因为它是测验应用程序,我有下一个和上一个按钮,当我点击它时,我将一个一个地显示项目数组列表。Now I need slide In and slide Out animation to apply to this Linear Layout.

我看过这个:

Link 1

Link 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);

但无法正常工作,请帮助解决此问题。

编辑:

问题:我已将此应用于线性布局,但发生的情况是,当我单击下一个按钮时,当前问题将向左滑动并出现一个空白屏幕,然后它将滑入并显示下一个问题,但我希望尽快当前问题滑出它应该是下一个问题。

【问题讨论】:

  • 你是如何将这个动画应用到你的视图中的?
  • 是的,哥们,我已将此应用于线性布局,但发生的情况是,当我单击下一个当前问题时,将向左滑动并出现一个空白屏幕,然后它将滑入并显示下一个问题,但我想要一旦当前问题滑出,就应该跟随下一个问题
  • 使用viewflipper和使用inanimation和out动画怎么样?
  • @PassionateAndroiden 我已经尝试过了,但由于我在数组列表中有 10 或 n 个项目,因此我无法使用 viewflipper
  • 您使用了多少活动?一个或多个?

标签: java android slide


【解决方案1】:

如果您的布局具有相同的内容,请在视图翻转器内创建两个布局。 用数据加载第一个视图并显示它。 当用户单击下一个或上一个时,使用数据加载下一个视图并保留一个标志以显示第二个视图现在可见并用动画显示它。

现在开始根据标志值加载适当的视图,并调用showext()。

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() 则动画将无法正常工作..
  • 是的,是的,在尝试之后我终于用 View Flipper 实现了它......非常感谢。现在的问题是如何提高滑入和滑出动画的速度?
  • 可以通过减少动画 xml 中的持续时间值来提高动画速度。你是这个意思吗?
【解决方案2】:

在 res/anim/ 中使用这个 xml

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);

【讨论】:

  • 如何将动画应用于布局?我不能将动画应用于单个项目,因为它必须首先从数组列表中获取值然后显示
  • 在下一次点击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);
  • 在单击下一个按钮时更改布局再次调用该活动。查看代码。我一次又一次地调用同一个类。
  • 或者正如一个人所说,你可以使用 viewflipper。
  • 我可以使用视图翻转器,但问题是要从 arraylist 加载的项目,而且我不知道如何使用 2 个布局进行管理
猜你喜欢
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多