我有一个布局,有几个cardView,其中有recyclerViews在他们 在开始第一个recyclerview是空的,所以卡不显示。getHeight返回0里面onPreDrawListenter
后来,recyclerview被填充,所以我希望它有一个很好的动画。 我试图将其他卡片向下移动,然后淡入卡片中。
要做到这一点,我设置了recyclerView的数据库,然后附加一个OnPreDrawListener到它周围的卡式视图,这样我就可以获得视图的高度,然后将视图设置为GONE并在其上运行一个动画动画它下面的卡片。
事情是,当我打电话给getMeasuredHeight时,我得到0. 它几乎和notifyDatasetChanged()只发生在下一帧中一样,所以视图并没有得到它的新高度。
这里是我的代码:
private void runSearchAnimation(List<Route> searchResult) {
if(rvSearchResults.getMeasuredHeight() == 0) {
Log.i(TAG, "height is 0");
resultsAdapter.setDatabase(searchResult);
cvSearchResults.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
cvSearchResults.getViewTreeObserver().removeOnPreDrawListener(this);
Log.i(TAG, "cvSearchResults.getMeasuredHeight() = " + cvSearchResults.getMeasuredHeight());
cvSearchResults.setVisibility(View.GONE);
ObjectAnimator contentAnim = ObjectAnimator.ofFloat(cvRecentSearches,
"translationY", cvRecentSearches.getTranslationY(), cvSearchResults.getMeasuredHeight());
contentAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
Log.i(TAG, "animation started");
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i(TAG, "animation ended");
cvSearchResults.setVisibility(View.VISIBLE);
}
});
contentAnim.setDuration(300);
contentAnim.start();
return true;
}
});
}
}
有没有人对如何解决这个想法?
我试图动画卡,并且那些不在recyclerview,但我想通了 – itayrabin
所以请张贴你如何解决它,所以别人应该知道。 – lionscribe
刚刚添加,其实很简单。 – itayrabin