我已经被困了很长一段时间了。我试图将包含在FrameLayout中的片段向右移动,这样只有片段的左边20%可见。
我认为我遇到的问题是父母不会让片段超出界限,或者我不知道如何移动它。我尝试过的所有东西都只是将碎片推向右侧墙壁,并将碎片缩放以适应。我需要它将片段推到右墙外面。任何帮助都不仅仅是值得赞赏的。
我试图实现的最终效果是,当您按下一个put-on时,片段会转换为完整视图,然后按下按钮会转换回20%视图。我已经设置了动画,只是片段的实际移动让我很难过。
答案 0 :(得分: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 Level 11动画师,以及使用动画师框架的NineOldAndroids backport。