【问题标题】:ANDROID: Navigation drawer menuItem Shared Element transitionANDROID:导航抽屉菜单项共享元素过渡
【发布时间】:2016-10-29 08:22:46
【问题描述】:

我正在尝试为导航抽屉菜单实现 共享元素转换

<item
        android:id="@+id/nav_studentprofile"
        android:icon="@drawable/studentprofile"
        android:title="@string/student_profile"
        />

我有另一个活动,ImageViewTextView

<ImageView
    android:layout_width="81dp"
    android:layout_height="68dp"
    app:srcCompat="@drawable/studentprofile"
    android:id="@+id/imageview_studentprofile" />

<TextView
    android:text="@string/student_profile"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/textview_studentprofile"
    android:layout_weight="1"
    android:textSize="30sp"/>

但是对于共享元素转换,我必须传递元素的视图, 我无法将 menuItem 转换为 View

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_studentprofile) {

    } else if (id == R.id.nav_classeshistory) {

    } else if (id == R.id.nav_studentattendance) {

    } else if (id == R.id.nav_datetracking) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

我想将 MenuItems 转换为 view 然后在共享元素转换中使用该视图

我的第一个活动

我的第二个活动

【问题讨论】:

    标签: android android-animation shared-element-transition


    【解决方案1】:

    当一个项目被点击时,您可以使用item.getActionView(); 来获取 menuitem 视图,但这只有在您在抽屉项目上添加了自定义视图时才有效。

    因此为导航抽屉项目创建一个虚拟自定义视图:layout name:dummy_drawer_item 并设置android:transitionName="@string/transition_string"

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        <!-- Add this line -->
        android:transitionName="@string/transition_string">
    
    </LinearLayout>
    

    然后,在 menu/drawer_items 中,为每个项目添加您的自定义视图 app:actionLayout="@layout/dummy_drawer_item"。例如:

     <item
                android:id="@+id/nav_camera"
                android:icon="@drawable/ic_menu_camera"
                android:title="Import"
                <!-- Add this line -->
                app:actionLayout="@layout/dummy_drawer_item"/>
            ...
    

    最后,当项目被点击时:

    public boolean onNavigationItemSelected(MenuItem item) {
    
    ...
     //Get the view of menuitem
      View v = item.getActionView();
    //Call your other activity 
     // Get the transition name from the string
        String transitionName = getString(R.string.transition_string);
    
        ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, view, transitionName);
    
        //Start the Intent
        ActivityCompat.startActivity(this, new Intent(this, YourOtherActivity.class),  options.toBundle());
    
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
    

    【讨论】:

    • 我正在使用片段事务...是否可以在使用导航抽屉进行片段事务时进行共享元素转换...
    猜你喜欢
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多