1

アプリケーションに新しい Transitions API を実装しようとしていますが、特定の問題が発生しています。

私のアクティビティでは、特定のビューでスライド移行を開始したいと考えています。これが私のレイアウトです

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.github.ksoichiro.android.observablescrollview.ObservableScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <FrameLayout
            android:id="@+id/header"
            android:layout_width="match_parent"
            android:layout_height="180dp">

            <ImageView
                android:id="@+id/ivRestaurantBg"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:adjustViewBounds="true"
                android:scaleType="centerCrop"
                android:src="@drawable/background_poly" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="80dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="15dp"
                android:layout_marginTop="70dp">

                <de.hdodenhof.circleimageview.CircleImageView
                    android:id="@+id/cvRestaurantLogo"
                    android:layout_width="80dp"
                    android:layout_height="80dp"
                    android:layout_alignParentLeft="true"
                    android:layout_marginRight="5dp"
                    android:transitionName="sharedRestaurantLogo"
                    android:src="@drawable/placeholder" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_toEndOf="@+id/cvRestaurantLogo"
                    android:layout_toRightOf="@+id/cvRestaurantLogo"
                    android:gravity="center_vertical"
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/tvRestaurantName"
                        style="@style/HeaderText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="4dp"
                        android:textSize="20sp" />

                    <TextView
                        android:id="@+id/tvRestaurantAddress"
                        style="@style/HeaderText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="15sp" />

                    <TextView
                        android:id="@+id/tvRestaurantContactNo"
                        style="@style/HeaderText"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textSize="15sp" />

                </LinearLayout>

            </RelativeLayout>

        </FrameLayout>

        <View
            android:id="@+id/anchor"
            android:layout_width="match_parent"
            android:layout_height="180dp"
            android:minHeight="180dp" />

        <LinearLayout
            android:id="@+id/body"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/anchor"
            android:orientation="vertical"
            android:paddingBottom="@dimen/activity_vertical_margin"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:background="@android:color/white"
            android:paddingTop="@dimen/activity_vertical_margin">

            <include android:id="@+id/mapSegment" layout="@layout/card_map_lite" /> <!-- Layout 1 to transition -->

            <include android:id="@+id/customerSegment" layout="@layout/card_customer_details" /> <!-- Layout 2 to transition -->

           <include android:id="@+id/ordersSegment" layout="@layout/card_dish_details" /> <!-- Layout 3 to transition -->

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/accept_order"
                android:id="@+id/btnAcceptOrder"
                android:layout_marginTop="10dp"
                android:background="@drawable/green_button"
                android:minWidth="120dp"
                android:minHeight="50dp"
                android:textAllCaps="false"
                android:textColor="@android:color/white"
                android:layout_gravity="center_horizontal" />
        </LinearLayout>
    </RelativeLayout>

</com.github.ksoichiro.android.observablescrollview.ObservableScrollView>

<include layout="@layout/gradient_header" />

<include layout="@layout/toolbar" />

</FrameLayout>

そして、私の活動ではこれを行います

@Override
protected void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
    requestWindowFeature(Window.FEATURE_CONTENT_TRANSITIONS);

    Transition transition = TransitionInflater.from(this)
            .inflateTransition(R.transition.shared_element_transition);

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_order_details);
    mMapSegment = findViewById(R.id.mapSegment);
    mCustomerSegment = findViewById(R.id.customerSegment);
    mOrdersSegment = findViewById(R.id.orderSegment);

    TransitionSet set = new TransitionSet();

    Slide mapSlide = new Slide();
    mapSlide.setDuration(2000);
    mapSlide.setSlideEdge(Gravity.BOTTOM);
    mapSlide.addTarget(mMapSegment);

    //others ignored

    set.addTransition(mapSlide);

    getWindow().setEnterTransition(set);
    getWindow().setSharedElementEnterTransition(transition);
}

ただし、これは機能しないようです。共有要素遷移は期待どおりに機能しますが、入力遷移は機能しません。行を削除すると、slide.addTarget(mMapSegment)アクティビティのビュー全体がアニメーション化されていることがわかるので、トランジションに特定のターゲットを追加することに関係があると確信しています。私は何か間違ったことをしていますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

これは少し前に尋ねられたことは知っていますが、同じ問題が再び発生したので、何がうまくいったかを共有したいと思いました. スライドさせようとしていたビューを新しい LinearLayout (match_parent/match_parent) でラップしました。この (通常は役に立たない) viewGroup によって addTarget が機能し始めた理由はわかりませんが、これは今では何度か役に立ちました。

問題を addTarget に絞り込むために、通常、ターゲットを addTarget(View.class) に置き換えます。画面遷移全体が表示される場合は、addTarget の問題です。そうしないと、他の何かが正しく配線されていない可能性があります。

私が時々しなければならないことは、追加した新しい LinearLayout の親 viewGroup に android:transitionGroup="false" を追加することです。なぜこれが時々必要で、他の必要がないのか、私は完全には理解していません.

これがアクティビティの移行に取り組んでいる人に役立つことを願っています.

于 2015-10-20T13:18:10.970 に答える