我已经在这件事上被难住好一阵子了。我正试图将包含在framelayout中的片段移到右边,这样只有左边20%的片段可见。
我想我遇到的问题是,父对象不会让片段移动到其边界之外,或者我不知道如何移动它。我试过的每件事都是把碎片推到右边的墙上,然后把碎片放大。我需要它把碎片推到右边墙外。任何帮助都将不胜感激。
我要达到的最后一个效果是,当你按下一个放在片段上的按钮,就会转换成全视图,然后按下一个按钮,就会转换回20%的视图。我已经设置好了动画,只是片段的实际移动让我难堪。
最佳答案
这意味着尽管它是动画,但这并不意味着片段本身就是动画使它看起来像的地方。在实际移动之前,它仍将在原始位置接收onclick事件。
您可能正在使用旧式动画(例如,TranslateAnimation
),它们是为瞬态效果而不是永久效果而设计的。
我向您指出a related question of mine的原因是许多解决方案,包括my own solution使用新的animator框架,该框架是为更持久的效果而设计的。
同样,这个例子对我也没有帮助,我正试图将它部分地移出屏幕,而不仅仅是将它压在边缘上。
尤其是对于动画师框架,在“将其部分移出屏幕”和“将其紧贴边缘”之间没有实质性的区别。例如,如果您阅读了我的解决方案,您将看到一个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的animators,也使用animator框架的nineoldandroids后台端口。