2012-10-11 36 views
3

我已经为此搁置了很长一段时间了。我试图将包含在FrameLayout中的片段移动到右侧,以便只有左侧20%的片段可见。将部分片段移出屏幕

我想我遇到的问题是,父母不会让片段超出边界,或者我不知道如何移动它。我所尝试过的所有东西都只是将片段推向右侧墙壁,然后将片段缩放以适合。我需要它将右边墙外的碎片推开。任何帮助将不胜感激。

我试图达到的最终效果是,当您推送穿戴片段翻译成全视图,然后按一个按钮翻译回20%的观点。我有所有的动画设置,只是片段的实际移动困扰着我。

+0

你是什么意思?“我有动画全部设置好了,只是片段的实际移动将我绊倒了”?这些言论似乎相互矛盾。您也可以在一两个月前询问以下问题(并回答以及其他答案):http://stackoverflow.com/questions/12253965/complete-working-sample-of-the-gmail-三片段动画场景 – CommonsWare

+0

这意味着虽然它具有动画效果,但并不意味着片段本身就是动画看起来像的地方。它仍然会在原始位置收到OnClick事件,直到其实际移动。 – WIllJBD

+0

此外,这个例子并不能帮助我,我试图将它部分地移出屏幕,而不是将它边缘化。 – WIllJBD

回答

2

这意味着虽然它具有动画效果,但并不意味着片段本身就是动画看起来像的地方。它仍然会在原始位置收到OnClick事件,直到其实际移动。

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

我指出a related question of mine的原因在于很多解决方案,包括my own solution都使用新的动画设计框架,该框架专为持久效果而设计。

此外,这个例子并没有帮助我,我试图将它部分地移出屏幕,而不是仅仅把它放在边缘上。

特别是对于动画构架而言,“将其部分移出屏幕”和“将其向边缘碾压”之间没有实质性区别。例如,如果你读了我的解决方案,你会看到一个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 backport。

+0

谢谢,我找到了一种不同的方式来完成,但感谢您的帮助。 – WIllJBD

+1

你能提供解决方案吗? – Bjarke

+1

@WIllJBD你会介意分享你的解决方案,将片段部分移出屏幕......我也从过去的一周一直无能为力......请帮助我...提前谢谢... –