android - ScrollView设置layoutParams后无法滚动
迷茫
迷茫 2017-04-18 09:13:07
0
1
472

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>
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(1)
阿神

まず最初に、属性のアニメーション方法が間違っていることをお伝えしておきます。translationYこの属性 View は存在します。つまり、属性名を設定すると、すべてのビューとそのサブクラスがその属性を持ちます。たとえば、次のように記述すると、自動的に Set方法 メソッドが呼び出されるため、次のコードを実行する必要はありません。 リーリー View.setTranslationY(float translationY)2 番目の問題は、LayoutParams.height が

に対応していることです。 リーリー

コードの実行後、

<-2 の設定は明らかに間違っています。通常は 0 より大きくなります。

このコード ブロックを削除した後、クリックしてオンラインで 100 ピクセルをパンしたい場合は、次のように書くことができます: LayoutParams.height リーリー

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート