我的android项目中有RecyclerView
,每行有2 LinearLayout
。
首先,我希望其中一个布局已经过去了。点击行后,它会通过动画显示出来。简而言之,我想在没有任何外部库的情况下实现可扩展的RecyclerView。你能给我一个解决方案吗?
我想通过动画hoder.itemView的高度来实现这一目标。但实际上我并不知道要插入什么而不是????
,因为起初我并不知道它的高度。
if(holder.layout2.getVisibility() == View.Gone) {
holder.layout2.setVisibility( View.VISIBLE );
animateHeight(holder.itemView,?????);
}
else {
animateHeight(holder.itemView,holder.itemView.getHeight - holder.layout2.getHeight());
holder.layout2.setVisibility( View.GONE );
}
public void animateHeight(final View v, final int height) {
final int initialHeight = v.getMeasuredHeight();
int duration = 500;
Interpolator interpolator = new AccelerateInterpolator();
// I have to set the same height before the animation because there is a glitch
// in the beginning of the animation
v.getLayoutParams().height = initialHeight;
final int diff = height - initialHeight;
v.requestLayout();
Animation a = new Animation() {
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
v.getLayoutParams().height = initialHeight + (int) (diff * interpolatedTime);
v.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
};
a.setDuration(duration);
a.setInterpolator(interpolator);
v.startAnimation(a);
}
答案 0 :(得分:0)
在你的视图持有者类中做这样的事情来获得每个孩子的身高,
itemView.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
mHeight = mView.getHeight();
mView.getViewTreeObserver().removeGlobalOnLayoutListener( this );
mView.setVisibility( View.GONE );
}
});
这将是扩展模式下孩子的高度,稍后当您尝试为视图设置动画时,可以使用它。