如何在android中滑入和滑出视图
我试图根据活动中的其他事件的上下文来制作一个视图(带有一些按钮的线性视图R.id.playerControl
)。
为此我有一个selectMediaItem
方法,当用户分别选择或取消选择一个项目时,它应该显示或隐藏视图。
我是新的动画在Android中,我有麻烦得到这个工作有两个原因:
该视图在动画时间之外保持在屏幕上,所以当它完成滑动时,它会跳回去 - 然后当它被请求滑入时跳出来滑回。
随着视图消失,屏幕上有一个永久的黑色空间。 我希望视图在可见时填充空间,如果不可见, GONE
空。 为此,我希望布局可以随着动画的变化而变化,这样它就可以推动其他事物的发展。
我的代码:
protected void selectMediaItem( ItemHandle item ) {
if (item != null) {
if (toPlay == null) {
View playerControl = findViewById(R.id.playerControl);
Animation slideInAdmination = AnimationUtils.loadAnimation(this, R.anim.slide_in);
playerControl.startAnimation(slideInAdmination);
}
}
else {
if (toPlay != null) {
View playerControl = findViewById(R.id.playerControl);
Animation slideInAdmination = AnimationUtils.loadAnimation(this, R.anim.slide_out);
playerControl.startAnimation(slideInAdmination);
}
}
toPlay = item;
}
slide_in.xml
<translate
android:duration="1000"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
有没有简单的方法将视图滑入到位并再次滑出?
我强烈建议你使用Property Animations。 你的示例代码会是这样的。
mSlidInAnimator = ObjectAnimator.ofFloat(mSlidingView, "translationY", 0);
mSlidInAnimator.setDuration(200);
mSlidInAnimator.start();
mSlidOutAnimator = ObjectAnimator.ofFloat(mSlidingView, "translationY", newPosOfView);
mSlidOutAnimator.setDuration(200);
mSlidOutAnimator.start();
“translationY”表示向上/向下动画。 使用“translationX”作为右侧的动画。
这里newPosOfView将是一个相对于你的默认视图位置的位置。 例如,如果您想要将视图向下移动50dp,则它将以像素为单位50dp。 在slideInAnimator中,pos是0,因为您想要移动到视图的orignal位置。
仔细阅读文档,它非常有帮助。
您需要添加:
slideInAdmination.setFillerAfter(true)
在调用startAnimation()
。 这使得视图在动画之后保持其新位置。