3

我已经为此困扰了很长一段时间了。我正在尝试将包含在 FrameLayout 中的片段向右移动,以便只有左侧 20% 的片段可见。

我认为我遇到的问题是父级不会让片段移动到其边界之外,或者我不知道如何移动它。我所尝试的一切都只是将片段推到右墙上,并缩放片段以适应。我需要它把碎片推到右墙外。任何帮助将不胜感激。

我想要达到的最终效果是,当你按下一个穿上片段时,片段会转换为全视图,然后按下按钮会转换回 20% 的视图。我已经设置好了动画,只是片段的实际移动让我很难过。

4

1 回答 1

2

这意味着虽然它有动画效果,但这并不意味着片段本身就是动画让它看起来的地方。在物理移动之前,它仍会在原始位置接收 OnClick 事件。

您可能正在使用旧式动画(例如TranslateAnimation),它们是为瞬态效果而不是永久效果而设计的。

我向您指出我的一个相关问题的原因是许多解决方案,包括我自己的解决方案,都使用了新的动画框架,该框架专为更持久的效果而设计。

该示例也对我没有帮助,我试图将其部分移出屏幕,而不仅仅是将其挤在边缘上。

特别是对于动画师框架,“将其部分移出屏幕”和“将其挤在边缘”之间没有实质性区别。例如,如果您阅读了我的解决方案,您会看到一个translateWidgets()演示一组小部件的水平幻灯片的方法:

private void translateWidgets(int deltaX, View... views) {
    for (final View v : views) {
      v.setLayerType(View.LAYER_TYPE_HARDWARE, null);

      v.animate().translationXBy(deltaX).setDuration(ANIM_DURATION)
       .setListener(new AnimatorListenerAdapter() {
         @Override
         public void onAnimationEnd(Animator animation) {
           v.setLayerType(View.LAYER_TYPE_NONE, null);
         }
       });
    }
  }

在您的情况下,deltaX将是任何适当的值来实现您的 20% 效果(大概0.2f是容器宽度的倍数,或沿着这些线),或者在应该看到完整片段时撤消该效果。

我的答案包含指向完整示例项目的链接,既适用于原生 API 级别 11 动画师,也适用于动画师框架的 NineOldAndroids 反向移植。

于 2012-10-11T23:26:34.180 回答