0

現在、次のような方法で CoordinatorLayout + AppbarLayout + CollapsingToolbarLayout を試しています。

1)「ツールバー」を使用してアプリバーを下にスクロールします[ネストされたScrollView/RecyclerViewはありません]。

2) アプリバーの下のコンテンツは、アプリバーのスクロールに合わせて移動する必要があります。

3) ViewPager の下に保持される複数の画像。

4) ViewPager の最後の項目は textview です。

次のレイアウトを使用して 1) と 2) を達成しました。

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/flexible.example.appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/flexible.example.collapsing"
            android:layout_width="match_parent"
            android:layout_height="300dp"
            app:expandedTitleMarginBottom="94dp"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
            app:contentScrim="?colorPrimary"
            >

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:id="@+id/text_sample"
                android:scrollbars="vertical"
                android:scrollIndicators="right"
                app:layout_collapseMode="parallax"
                app:layout_scrollFlags="scroll|enterAlways"
                android:layout_gravity="center"
                android:nestedScrollingEnabled="true"
                />
        </android.support.design.widget.CollapsingToolbarLayout>

        <android.support.v7.widget.Toolbar
            android:id="@+id/ioexample.toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/PM01"
            android:elevation="4dp"
            app:layout_collapseMode="pin"
            app:layout_anchor="@id/flexible.example.collapsing"
            app:layout_anchorGravity="bottom"
            app:theme="@style/ThemeOverlay.AppCompat.Light"
            style="@style/ToolBarWithNavigationBack"
            app:layout_scrollFlags="scroll|enterAlways|snap"
            >

        </android.support.v7.widget.Toolbar>


    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/recyclerviewcontainer"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

私が今達成しようとしているのは、collpasingtoolbarlayout 内のテキストビューをスクロール可能にすることです (上記の #4)。これまでの検索では、Appbar がすべてのタッチ イベントを単独で処理していると信じていたので、これは簡単ではないようです。ただし、これは要件であるため、これを完了するのに役立つガイダンス/ポインターがあれば幸いです.

この機能を実現するために何をどこで探すべきか教えてください。

4

1 に答える 1

0

多くの調査とSOの検索を行った後、目的の効果を達成するために何をする必要があるかがわかりました。

1) appbarlayout のカスタム動作を実装します。

public class AppBarLayoutCustomBehavior extends AppBarLayout.Behavior {
    private boolean setIntercept = false;
    private boolean lockAppBar = false;

    DragCallback mDragCallback = new DragCallback() {
        @Override
        public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
            return !lockAppBar;
        }
    };

    @Override
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, AppBarLayout child, MotionEvent ev) {
        super.onInterceptTouchEvent(parent, child, ev);
        return setIntercept;
    }

    public void setInterceptTouchEvent(boolean set) {
        setIntercept = set;
    }

    public AppBarLayoutCustomBehavior() {
        super();
        setDragCallback(mDragCallback);
    }

    public AppBarLayoutCustomBehavior(Context ctx, AttributeSet attributeSet) {
        super(ctx, attributeSet);
        setDragCallback(mDragCallback);
    }

    public void lockAppBar() {
        lockAppBar = true;
    }

    public void unlockAppBar() {
        lockAppBar = false;
    }
}

2) アプリ バーでこのカスタム動作を使用します。

CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appBarLayout.getLayoutParams();
        final AppBarLayoutCustomBehavior mBehavior = new AppBarLayoutCustomBehavior();
        lp.setBehavior(mBehavior);

/// use toolbar to enable/disable dragging on the appbar behavior. This way
/// out toolbar acts as a drag handle for the app bar.
        Toolbar toolbar = (Toolbar) activity.findViewById(R.id.main_toolbar);
        toolbar.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        mBehavior.setInterceptTouchEvent(true);
                        return true;
                    case MotionEvent.ACTION_CANCEL:
                        mBehavior.setInterceptTouchEvent(false);
                        return true;
                }
                return false;
            }
        });

3)テキストビューに移動方法を設定してスクロール可能にします

textView.setMovementMethod(ScrollingMovementMethod.getInstance());
于 2016-07-23T13:53:23.217 に答える