【发布时间】:2016-02-16 23:59:23
【问题描述】:
我有一个包含 5-10 个项目的导航抽屉。我为这些项目添加了动画,以便它们从左到右滑动。问题是这仅在我第一次打开抽屉时发生,其余时间没有动画。作为补救措施,我在 onDrawerOpened(View drawerView) 方法内的适配器上添加了 notifyDataSetChanged。现在项目每次都有动画,但它的效果就像
- 所有项目均无动画进入。
- 然后所有项目都在我面前重新创建。
- 然后它们会动起来。 希望大家有所了解。
所以我想要的是 => 每次我打开抽屉时,导航抽屉项目都必须从左到右动画,通过滑动和点击导航切换。
我的一些代码 sn-ps 来说明我做了什么 内部适配器膨胀视图:
@Override
public View getView(int position, LayoutInflater inflator, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflator.inflate(R.layout.base_drawer_nav_item, parent, false);
ImageView nav_item_icon = (ImageView) convertView.findViewById(R.id.nav_item_icon);
TextView nav_item_title = (TextView) convertView.findViewById(R.id.nav_item_title);
nav_item_icon.setImageResource(this.icon);
nav_item_title.setText(this.title);
}
if(convertView != null)
setAnimation(convertView, position);
return convertView;
}
private void setAnimation(View viewToAnimate, int position) {
if(mContext != null) {
Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left);
animation.setDuration(position * 50 + 200);
viewToAnimate.startAnimation(animation);
}
}
导航抽屉所在的内部活动 - 在 onCreate() 方法中(请注意,我添加 notifyDataSetChanged 只是作为一种补救措施,它肯定不会像我预期的那样工作)
//some code above and below this
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
adapter.notifyDataSetChanged();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};
我的另一个想法是,我应该将所有视图保存在 ArrayList 中,然后在每次打开 navigationDrawer 时进行动画处理(使用 for loop + animation.start())虽然我没有实现。
【问题讨论】:
标签: android animation navigation-drawer notifydatasetchanged