0

我有一個具有5-10個項目的導航抽屜。我已經爲這些項目添加了動畫,以便它們從左向右滑動。問題是這種情況只發生在我第一次打開抽屜時,其餘時間沒有動畫。作爲補救措施,我在onDrawerOpened(View drawerView)方法內部的適配器上添加了notifyDataSetChanged。現在這些項目每次都是動畫效果,但效果就像導航抽屜項目只能動畫一次

  1. 所有項目都沒有動畫輸入。
  2. 然後所有項目都在我面前重新創建。
  3. 然後他們動畫。 希望大家都有想法。

所以我想要的是=>導航抽屜裏的物品每次打開抽屜時都必須從左到右做動畫,滑動並點擊導航切換。

我的一些代碼片段給知道我做了 內部適配器,其膨脹的觀點:

@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打開(使用循環+動畫on.start())雖然我沒有實現這個。

回答

1

您的方法setAnimation()不設置動畫,而是調用它並執行一次。因此,每當你想要動畫行(例如刷卡或點擊),你將不得不打電話setAnimation()

編輯:notifyDataSetChanged工作,因爲它調用getView()方法在最後調用你的setAnimation()

編輯2:可能是這樣的:從適配器移動你的setAnimation()。現在,有一些解決方案,但只是把它放在MainActivity,然後使這個方法:

public void setAnimation(int position){ 
    Animation animation = AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left); 
    animation.setDuration(position * 50 + 200); 
    drawerListView.getChildAt(position).startAnimation(animation); 
} 

這將動畫一排,你可以很容易地從主要活動調用它。

如果你想讓所有的行動畫,你可以在for循環中調用每個位置,但更好的方法是使用AnimationSet

+0

您能否告訴我我應該遵循的正確方法,可能在一些代碼的幫助下 – kishorepatel

+0

我編輯我的答案與例 – Gudin

+0

如果它的工作,請標記爲答案。如果你需要更多的幫助,你可以在這裏問。 – Gudin