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);
}
});
}
});
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/ll_wrap"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:background="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="400dp">
</FrameLayout>
<FrameLayout
android:background="@android:color/darker_gray"
android:layout_width="match_parent"
android:layout_height="400dp">
</FrameLayout>
</LinearLayout>
</ScrollView>
まず最初に、属性のアニメーション方法が間違っていることをお伝えしておきます。
に対応していることです。 リーリーtranslationY
この属性View
は存在します。つまり、属性名を設定すると、すべてのビューとそのサブクラスがその属性を持ちます。たとえば、次のように記述すると、自動的にSet方法
メソッドが呼び出されるため、次のコードを実行する必要はありません。 リーリーView.setTranslationY(float translationY)
2 番目の問題は、LayoutParams.height がコードの実行後、
<-2 の設定は明らかに間違っています。通常は 0 より大きくなります。このコード ブロックを削除した後、クリックしてオンラインで 100 ピクセルをパンしたい場合は、次のように書くことができます:
LayoutParams.height
リーリー