Android 关闭时导航抽屉动画滞后

Android 关闭时导航抽屉动画滞后,android,navigation,Android,Navigation,我将为我的一个项目实现导航抽屉。我能够实现同样的目标。然而,在导航抽屉中存在一些滞后。请建议 下面是我的代码 Home_activity.xml Home.java public class Home extends AppCompatActivity implements NavigationFragment.FragmentDrawerListener { Toolbar toolbar; RelativeLayout box, searchBox; Ima

我将为我的一个项目实现导航抽屉。我能够实现同样的目标。然而,在导航抽屉中存在一些滞后。请建议

下面是我的代码

Home_activity.xml


Home.java

public class Home extends AppCompatActivity implements NavigationFragment.FragmentDrawerListener {
    Toolbar toolbar;
    RelativeLayout box, searchBox;
    ImageView buyRentImg, applyLoanImg, newProjectImg, postProjectImg;
    TextView buyRentTxt, postPropertyTxt;
    Menu myMenu;
    int settleCount;
    private NavigationFragment drawerFragment;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        settleCount = 1;
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        searchBox = (RelativeLayout) findViewById(R.id.searchBox);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle(" Thanehomes");
        getSupportActionBar().setIcon(R.drawable.ic_logo);
        box = (RelativeLayout) findViewById(R.id.box);
        box.setRotation(45.0f);
        searchBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent searchIntent = new Intent(Home.this, SearchProperty.class);
                startActivity(searchIntent);
            }
        });
        drawerFragment = (NavigationFragment)
                getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawerLayout), toolbar);
        drawerFragment.setDrawerListener(this);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        myMenu = menu;
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.home_menu, menu);
        MenuItem item = myMenu.findItem(R.id.notification);
        MenuItemCompat.setActionView(item, R.layout.update_count);
        View count = myMenu.findItem(R.id.notification).getActionView();
        TextView t = (TextView) count.findViewById(R.id.count);
        if (settleCount < 1) {
            t.setVisibility(View.GONE);
        } else {
            t.setVisibility(View.VISIBLE);
            t.setText("" + settleCount);
        }
        count.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // Toast.makeText(getApplicationContext(), "Click", Toast.LENGTH_SHORT).show();
                Intent notificationIntent = new Intent(Home.this, NotificationList.class);
                startActivity(notificationIntent);
            }
        });
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            default:
                return super.onOptionsItemSelected(item);
        }
    }
    @Override
    public void onDrawerItemSelected(View view, int position) {
        Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT).show();
    }
}
公共类Home扩展AppCompative实现NavigationFragment.FragmentDrawerListener{
工具栏;
相对搜索框、搜索框;
ImageView buyRentImg、ApplyLanimg、newProjectImg、postProjectImg;
TextView buyRentTxt,PostPropertyText;
菜单我的菜单;
国际结算账户;
私人导航碎片抽屉碎片;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
结算账户=1;
toolbar=(toolbar)findviewbyd(R.id.toolbar);
searchBox=(RelativeLayout)findViewById(R.id.searchBox);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“Thanehomes”);
getSupportActionBar().setIcon(R.drawable.ic_徽标);
box=(RelativeLayout)findViewById(R.id.box);
设置旋转(45.0f);
searchBox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent searchIntent=新Intent(Home.this、SearchProperty.class);
星触觉(searchIntent);
}
});
抽屉碎片=(NavigationFragment)
getSupportFragmentManager().findFragmentById(R.id.fragment\u导航\u抽屉);
抽屉碎片设置(R.id.fragment\u navigation\u抽屉,(抽屉布局)findViewById(R.id.抽屉布局),工具栏);
付款人片段。setDrawerListener(本);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
我的菜单=菜单;
MenuInflater充气机=getMenuInflater();
充气机。充气(右菜单。主菜单,菜单);
MenuItem item=myMenu.findItem(R.id.notification);
MenuItemCompat.setActionView(项目、R.layout.update\u计数);
视图计数=myMenu.findItem(R.id.notification).getActionView();
TextView t=(TextView)count.findViewById(R.id.count);
如果(结算账户<1){
t、 设置可见性(View.GONE);
}否则{
t、 设置可见性(View.VISIBLE);
t、 setText(“+settleCount”);
}
count.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//Toast.makeText(getApplicationContext(),“单击”,Toast.LENGTH\u SHORT.show();
Intent notificationIntent=新意图(Home.this,NotificationList.class);
startActivity(通知意图);
}
});
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理项目选择
开关(item.getItemId()){
违约:
返回super.onOptionsItemSelected(项目);
}
}
@凌驾
选定的绘图区域上的公共void(视图,int位置){
Toast.makeText(getApplicationContext(),position+“”,Toast.LENGTH_SHORT).show();
}
}
NavigationFragment.java

public class NavigationFragment extends Fragment {

    private static String TAG = NavigationFragment.class.getSimpleName();

    private RecyclerView recyclerView;
    private ActionBarDrawerToggle mDrawerToggle;
    private DrawerLayout mDrawerLayout;
    private NavigationDrawerAdapter adapter;
    private View containerView;
    private static String[] titles = null;
    private FragmentDrawerListener drawerListener;

    public NavigationFragment() {

    }

    public void setDrawerListener(FragmentDrawerListener listener) {
        this.drawerListener = listener;
    }

    public static List<NavDrawerItem> getData() {
        List<NavDrawerItem> data = new ArrayList<>();


        // preparing navigation drawer items
        for (int i = 0; i < titles.length; i++) {
            NavDrawerItem navItem = new NavDrawerItem();
            navItem.setTitle(titles[i]);
            data.add(navItem);
        }
        return data;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // drawer labels
        titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflating view layout
        View layout = inflater.inflate(R.layout.fragment_navigation, container, false);
        recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);

        adapter = new NavigationDrawerAdapter(getActivity(), getData());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
            @Override
            public void onClick(View view, int position) {
                drawerListener.onDrawerItemSelected(view, position);
                mDrawerLayout.closeDrawer(containerView);
            }

            @Override
            public void onLongClick(View view, int position) {

            }
        }));

        return layout;
    }


    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {
        containerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                toolbar.setAlpha(1 - slideOffset / 2);
            }
        };

        mDrawerLayout.addDrawerListener(mDrawerToggle);
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });

    }

    public static interface ClickListener {
        public void onClick(View view, int position);

        public void onLongClick(View view, int position);
    }

    static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

        private GestureDetector gestureDetector;
        private ClickListener clickListener;

        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
            this.clickListener = clickListener;
            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && clickListener != null) {
                        clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child));
                    }
                }
            });
        }

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

            View child = rv.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
                clickListener.onClick(child, rv.getChildPosition(child));
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }


    }

    public interface FragmentDrawerListener {
        public void onDrawerItemSelected(View view, int position);
    }
}
公共类NavigationFragment扩展了片段{
私有静态字符串标记=NavigationFragment.class.getSimpleName();
私人回收站;
私有操作bardrawertoggle mDrawerToggle;
私人抽屉布局mDrawerLayout;
专用导航雷达适配器;
私有视图容器视图;
私有静态字符串[]titles=null;
私人碎片抽屉抽屉;
公共导航片段(){
}
public void setDrawerListener(FragmentDrawerListener侦听器){
this.drawerListener=侦听器;
}
公共静态列表getData(){
列表数据=新的ArrayList();
//准备导航抽屉项目
对于(int i=0;ipublic class NavigationFragment extends Fragment {

    private static String TAG = NavigationFragment.class.getSimpleName();

    private RecyclerView recyclerView;
    private ActionBarDrawerToggle mDrawerToggle;
    private DrawerLayout mDrawerLayout;
    private NavigationDrawerAdapter adapter;
    private View containerView;
    private static String[] titles = null;
    private FragmentDrawerListener drawerListener;

    public NavigationFragment() {

    }

    public void setDrawerListener(FragmentDrawerListener listener) {
        this.drawerListener = listener;
    }

    public static List<NavDrawerItem> getData() {
        List<NavDrawerItem> data = new ArrayList<>();


        // preparing navigation drawer items
        for (int i = 0; i < titles.length; i++) {
            NavDrawerItem navItem = new NavDrawerItem();
            navItem.setTitle(titles[i]);
            data.add(navItem);
        }
        return data;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // drawer labels
        titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflating view layout
        View layout = inflater.inflate(R.layout.fragment_navigation, container, false);
        recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);

        adapter = new NavigationDrawerAdapter(getActivity(), getData());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
            @Override
            public void onClick(View view, int position) {
                drawerListener.onDrawerItemSelected(view, position);
                mDrawerLayout.closeDrawer(containerView);
            }

            @Override
            public void onLongClick(View view, int position) {

            }
        }));

        return layout;
    }


    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) {
        containerView = getActivity().findViewById(fragmentId);
        mDrawerLayout = drawerLayout;
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                super.onDrawerSlide(drawerView, slideOffset);
                toolbar.setAlpha(1 - slideOffset / 2);
            }
        };

        mDrawerLayout.addDrawerListener(mDrawerToggle);
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });

    }

    public static interface ClickListener {
        public void onClick(View view, int position);

        public void onLongClick(View view, int position);
    }

    static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

        private GestureDetector gestureDetector;
        private ClickListener clickListener;

        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
            this.clickListener = clickListener;
            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && clickListener != null) {
                        clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child));
                    }
                }
            });
        }

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

            View child = rv.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
                clickListener.onClick(child, rv.getChildPosition(child));
            }
            return false;
        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }


    }

    public interface FragmentDrawerListener {
        public void onDrawerItemSelected(View view, int position);
    }
}
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}