ScrollView中包含一个高度远超屏幕的LinearLayout,可以正常滚动。当使用ObjectAnimator把ScrollView向上平移100个px,在updateLisnter中重设ScrollView的高度后,Scrollview没有完全显示,也无法滚动,这是什么原因呢?
代码:
ll_wrap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(scrollview, "translationY", -100f);
objectAnimator.setDuration(500);
objectAnimator.start();
objectAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
//重设ScrollView高度
ViewGroup.LayoutParams params = scrollview.getLayoutParams();
params.height = (int) (scrollview.getHeight() - (float) valueAnimator.getAnimatedValue());
scrollview.setLayoutParams(params);
}
});
}
});
布局代码:
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
首先,很遗憾的告诉你,你的属性动画方法弄错了,
translationY这个属性View有,也就是所有的View及其子类都会有,你设置了属性名称,那么它会自动去调用对应的Set方法,比如,你现在这样写,那么它会自动调用View.setTranslationY(float translationY)方法,所以你无需再执行下面的代码:其次还有个问题,LayoutParams.height 对应的有
你的代码执行起来后,设置的
LayoutParams.height<-2,这很明显是不对的,一般都是大于0的.删掉这段代码块后,如果你希望每次点击都网上平移100px,那么你可以这样写: