Android Open Source - RibbonMenu Ribbon Menu View






From Project

Back to project page RibbonMenu.

License

The source code is released under:

Apache License

If you think the Android project RibbonMenu listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.darvds.ribbonmenu;
//  ww  w  .jav a  2 s .com

import java.util.ArrayList;

import org.xmlpull.v1.XmlPullParser;

import android.content.Context;
import android.content.res.XmlResourceParser;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.darvds.ribbonmenu.RibbonMenuView.SavedState;

public class RibbonMenuView extends LinearLayout {

  private ListView rbmListView;
  private View rbmOutsideView;
  
  private iRibbonMenuCallback callback;
  
  private static ArrayList<RibbonMenuItem> menuItems;
  
  
  public RibbonMenuView(Context context) {
    super(context);
    
    
    load();
  }
  
  public RibbonMenuView(Context context, AttributeSet attrs) {
    super(context, attrs);

    load();
  }


  
  
  private void load(){
    
    if(isInEditMode()) return;
    
    
    inflateLayout();    
    
    initUi();
    
    
  }
  
  
  private void inflateLayout(){
    
    
    
    
    try{
      LayoutInflater.from(getContext()).inflate(R.layout.rbm_menu, this, true);
      } catch(Exception e){
        
      }  
    
    
  }
  
  private void initUi(){
    
    rbmListView = (ListView) findViewById(R.id.rbm_listview);
    rbmOutsideView = (View) findViewById(R.id.rbm_outside_view);
        
    rbmOutsideView.setOnClickListener(new OnClickListener() {
      
      @Override
      public void onClick(View v) {
        hideMenu();
        
      }
    });
    
    
    rbmListView.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        
        if(callback != null)          
          callback.RibbonMenuItemClick(menuItems.get(position).id);
        
        hideMenu();
      }
      
    });
      
    
  }
  
  
  public void setMenuClickCallback(iRibbonMenuCallback callback){
    this.callback = callback;
  }
  
  public void setMenuItems(int menu){
    
    parseXml(menu);
    
    if(menuItems != null && menuItems.size() > 0)
    {
      rbmListView.setAdapter(new Adapter());
      
    }
    
    
    
  
  }
  
  
  public void setBackgroundResource(int resource){
    rbmListView.setBackgroundResource(resource);
    
  }
  
  
  
  
  public void showMenu(){
    rbmOutsideView.setVisibility(View.VISIBLE);  
        
    rbmListView.setVisibility(View.VISIBLE);  
    rbmListView.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.rbm_in_from_left));
    
  }
  
  
  public void hideMenu(){
    
    rbmOutsideView.setVisibility(View.GONE);
    rbmListView.setVisibility(View.GONE);  
    
    rbmListView.startAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.rbm_out_to_left));
    
  }
  
  
  public void toggleMenu(){
    
    if(rbmOutsideView.getVisibility() == View.GONE){
      showMenu();
    } else {
      hideMenu();
    }
  }
  
  
  private void parseXml(int menu){
    
    menuItems = new ArrayList<RibbonMenuView.RibbonMenuItem>();
    
    
    try{
      XmlResourceParser xpp = getResources().getXml(menu);
      
      xpp.next();
      int eventType = xpp.getEventType();
      
      
      while(eventType != XmlPullParser.END_DOCUMENT){
        
        if(eventType == XmlPullParser.START_TAG){
          
          String elemName = xpp.getName();
            
          
          
          if(elemName.equals("item")){
                      
            
            String textId = xpp.getAttributeValue("http://schemas.android.com/apk/res/android", "title");
            String iconId = xpp.getAttributeValue("http://schemas.android.com/apk/res/android", "icon");
            String resId = xpp.getAttributeValue("http://schemas.android.com/apk/res/android", "id");
            
            
            RibbonMenuItem item = new RibbonMenuItem();
            item.id = Integer.valueOf(resId.replace("@", ""));
            item.text = resourceIdToString(textId);
            item.icon = Integer.valueOf(iconId.replace("@", ""));
            
            menuItems.add(item);
            
          }
          
          
          
        }
        
        eventType = xpp.next();
        
        
      }
      
      
    } catch(Exception e){
      e.printStackTrace();
    }
    
  }
  
  
  
  
  
  private String resourceIdToString(String text){
    
    if(!text.contains("@")){
      return text;
    } else {
                  
      String id = text.replace("@", "");
                  
      return getResources().getString(Integer.valueOf(id));
      
    }
    
  }
  
  
  public boolean isMenuVisible(){    
    return rbmOutsideView.getVisibility() == View.VISIBLE;    
  }
  
    
  
  
  @Override 
  protected void onRestoreInstanceState(Parcelable state)  {
      SavedState ss = (SavedState)state;
      super.onRestoreInstanceState(ss.getSuperState());

      if (ss.bShowMenu)
          showMenu();
      else
          hideMenu();
  }
  
  

  @Override 
  protected Parcelable onSaveInstanceState()  {
      Parcelable superState = super.onSaveInstanceState();
      SavedState ss = new SavedState(superState);

      ss.bShowMenu = isMenuVisible();

      return ss;
  }

  static class SavedState extends BaseSavedState {
      boolean bShowMenu;

      SavedState(Parcelable superState) {
          super(superState);
      }

      private SavedState(Parcel in) {
          super(in);
          bShowMenu = (in.readInt() == 1);
      }

      @Override
      public void writeToParcel(Parcel out, int flags) {
          super.writeToParcel(out, flags);
          out.writeInt(bShowMenu ? 1 : 0);
      }

      public static final Parcelable.Creator<SavedState> CREATOR
              = new Parcelable.Creator<SavedState>() {
          public SavedState createFromParcel(Parcel in) {
              return new SavedState(in);
          }

          public SavedState[] newArray(int size) {
              return new SavedState[size];
          }
      };
  }
  
  
  
  class RibbonMenuItem{
    
    int id;
    String text;
    int icon;
    
  }
  
  
  
  private class Adapter extends BaseAdapter {

    private LayoutInflater inflater;
    
    public Adapter(){
      inflater = LayoutInflater.from(getContext());
    }
    
    
    
    @Override
    public int getCount() {
      
      return menuItems.size();
    }

    @Override
    public Object getItem(int position) {
      
      return null;
    }

    @Override
    public long getItemId(int position) {
      
      return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      
      final ViewHolder holder;
      
      if(convertView == null || convertView instanceof TextView){
        convertView = inflater.inflate(R.layout.rbm_item, null);
        
        holder = new ViewHolder();
        holder.image = (ImageView) convertView.findViewById(R.id.rbm_item_icon);
        holder.text = (TextView) convertView.findViewById(R.id.rbm_item_text);
            
        convertView.setTag(holder);
      
      } else {
      
        holder = (ViewHolder) convertView.getTag();
      }
      
      holder.image.setImageResource(menuItems.get(position).icon);
      holder.text.setText(menuItems.get(position).text);
      
      
      return convertView;
    }
    
    
    class ViewHolder {
      TextView text;
      ImageView image;
    
    }
      
    
    
    
  }
  


}




Java Source Code List

com.darvds.ribbonmenu.RibbonMenuView.java
com.darvds.ribbonmenu.sample.RibbonsampleActivity.java
com.darvds.ribbonmenu.iRibbonMenuCallback.java