继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

app主页的一种实现

nickcau
关注TA
已关注
手记 114
粉丝 6509
获赞 303

效果图:

https://img.mukewang.com/5c205b950001549706081116.jpg

主activity:

public class TabActivity extends TutorialActivity implements
      RCBottomTabMenu.OnTabClickListener, IAnimationDelegate,
      RCBaseTitleBar.HeaderClickListener {

   private int mCurrentFragment = 0;
   RCBottomTabMenu mRcBottomTabMenu;
   RCBottomPopMenu mRCBottomPopMenu;
   private List<RCTabItem> mRCTabArray;
   private View mCoverView;

   public static void startActivity(Context context) {
      Intent intent = new Intent();
      intent.setClass(context,TabActivity.class);
      context.startActivity(intent);
   }




   public static enum MainActivities {
      Ringout {
         @Override
         public String toString() {
            return "Ringout";
         }
      },
      Messages {
         @Override
         public String toString() {
            return "Messages";
         }
      },
      Calllog {
         @Override
         public String toString() {
            return "CallLog";
         }
      },
      Contacts {
         @Override
         public String toString() {
            return "Contacts";
         }
      },
      Text {
         @Override
         public String toString() {
            return "Text";
         }
      },
      Favorites {
         @Override
         public String toString() {
            return "Favorites";
         }
      },
      Fax {
         @Override
         public String toString() {
            return "Fax";
         }
      },
      Conferencing {
         @Override
         public String toString() {
            return "Conferencing";
         }
      },
      Meetings {
         @Override
         public String toString() {
            return "Meetings";
         }
      },
      RCDocuments {
         @Override
         public String toString() {
            return "RCDocuments";
         }
      }
   }

   private ArrayList<DropDownItem> getTopMenuListData() {
      ArrayList<DropDownItem> mTopMenuList = new ArrayList<DropDownItem>();
      mTopMenuList.add(new DropDownItem(this.getResources().getString(
            R.string.message_all), RCTitleBarWithDropDownFilter.STATE_ALL,
            0));

      mTopMenuList.add(new DropDownItem(this.getResources().getString(
            R.string.message_voice),
            RCTitleBarWithDropDownFilter.STATE_VOICE, 0));

      mTopMenuList.add(new DropDownItem(this.getResources().getString(
            R.string.message_fax), RCTitleBarWithDropDownFilter.STATE_FAX,
            0));

      mTopMenuList.add(new DropDownItem(this.getResources().getString(
            R.string.message_text),
            RCTitleBarWithDropDownFilter.STATE_TEXT, 0));

      return mTopMenuList;
   }

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      setContentView(R.layout.tab_activity_main);
      final RCTitleBarWithDropDownFilter mainTitleBar = (RCTitleBarWithDropDownFilter) findViewById(R.id.header);
      mainTitleBar.setDropDownItemList(getTopMenuListData());
      mainTitleBar.setOnDropDownMenuClick(new DropDownMenuClicked() {
         @Override
         public void onDropDownMenuClicked(int index) {
            mainTitleBar.initMessageFilterWithState(index);
         }
      });
      mainTitleBar.setText(R.string.message_all);
      mainTitleBar.setButtonsClickCallback(this);
      mRCTabArray = updateMenuDataList();
      mRcBottomTabMenu = (RCBottomTabMenu) findViewById(R.id.rcBottomTabBar);

      mRcBottomTabMenu.setOnTabClickListener(this);
      mRcBottomTabMenu.addTabs(this, mRCTabArray);
      mRCBottomPopMenu = (RCBottomPopMenu) findViewById(R.id.rcBottomPopWidget);
      mRCBottomPopMenu.setOnTabClickListener(this);
      mRCBottomPopMenu.setAnimationDelegate(this);
      mRCBottomPopMenu.addTabs(this, mRCTabArray);
      mCoverView = findViewById(R.id.cover_view);
      mCoverView.setOnTouchListener(new View.OnTouchListener() {
         @Override
         public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
               popDownWidget(0, false);
            }
            return true;
         }
      });
      
   }

   private void popDownWidget(final int tab, final boolean isSwitch) {
      mRCBottomPopMenu.closeWithAnimation(tab, isSwitch);
   }

   private List<RCTabItem> updateMenuDataList() {
      List<RCTabItem> tabItems = new ArrayList<RCTabItem>();

      tabItems.add(new RCTabItem(MainActivities.Ringout.toString(),
            MainActivities.Ringout.ordinal(),
            R.drawable.launch_bar_button_foreground_call,
            R.string.menu_list_dialpad));

      tabItems.add(new RCTabItem(MainActivities.Messages.toString(),
            MainActivities.Messages.ordinal(),
            R.drawable.launch_bar_button_foreground_message,
            R.string.menu_list_messages));

      tabItems.add(new RCTabItem(MainActivities.Calllog.toString(),
            MainActivities.Calllog.ordinal(),
            R.drawable.launch_bar_button_foreground_call_log,
            R.string.menu_list_recents));

      tabItems.add(new RCTabItem(MainActivities.Contacts.toString(),
            MainActivities.Contacts.ordinal(),
            R.drawable.launch_bar_button_foreground_contact,
            R.string.menu_list_contact));

      tabItems.add(new RCTabItem(
            MainActivities.Text.toString(),
            MainActivities.Text.ordinal(),
            tabItems.size() >= 4 ? R.drawable.widget_bar_button_foreground_sms
                  : R.drawable.launch_bar_button_foreground_sms,
            R.string.menu_list_sms));

      tabItems.add(new RCTabItem(
            MainActivities.Favorites.toString(),
            MainActivities.Favorites.ordinal(),
            tabItems.size() >= 4 ? R.drawable.widget_bar_button_foreground_favorite
                  : R.drawable.launch_bar_button_foreground_favorite,
            R.string.menu_list_favorites));

      tabItems.add(new RCTabItem(MainActivities.Fax.toString(),
            MainActivities.Fax.ordinal(),
            R.drawable.widget_bar_button_foreground_fax,
            R.string.menu_list_fax));

      tabItems.add(new RCTabItem(MainActivities.Conferencing.toString(),
            MainActivities.Conferencing.ordinal(),
            R.drawable.widget_bar_button_foreground_conf,
            R.string.menu_list_conference));

      tabItems.add(new RCTabItem(MainActivities.Meetings.toString(),
            MainActivities.Meetings.ordinal(),
            R.drawable.widget_bar_button_foreground_meeting,
            R.string.tab_name_zoom_video));

      tabItems.add(new RCTabItem(MainActivities.RCDocuments.toString(),
            MainActivities.RCDocuments.ordinal(),
            R.drawable.widget_bar_button_foreground_document,
            R.string.menu_list_documents));
      return tabItems;
   }

   @Override
   public void onTabClick(int tab) {
      if (mRCBottomPopMenu.isShowing()) {
         popDownWidget(tab, mCurrentFragment != tab);
      } else if (mCurrentFragment != tab) {
         setCurrentTab(tab);
      }
   }

   private void setCurrentTab(int tab) {
      boolean previous = isSelectItemInPopWidget(mCurrentFragment);
      boolean current = isSelectItemInPopWidget(tab);
      if (previous && current) {
         mRCBottomPopMenu.setItemSelectedState(tab);
      } else if (!previous && !current) {
         mRcBottomTabMenu.setItemSelectedState(tab);
      } else {
         mRcBottomTabMenu.setItemSelectedState(tab);
         mRCBottomPopMenu.setItemSelectedState(tab);
      }
      mCurrentFragment = tab;
      // setContainer(tab);
   }

   @Override
   public void onPlusClick(boolean isFromMenu) {
      if (mRCBottomPopMenu.isShowing()) {
         popDownWidget(0, false);
      } else {
         if (isSelectItemInPopWidget(0)) {
            mRCBottomPopMenu.setItemSelectedState(0);
         }
         popUpWidget();
      }
   }

   private boolean isSelectItemInPopWidget(int tab) {
      return tab > mRCTabArray.get(3).getItemId();
   }

   private void popUpWidget() {
      mRCBottomPopMenu.openWithAnimation();
   }

   @Override
   public void onAnimationStart(boolean isToUp) {
      if (isToUp) {
         mRcBottomTabMenu.rotatePlusButton(this, true);
         mCoverView.startAnimation(AnimationUtils.loadAnimation(this,
               R.anim.cover_show));
      } else {
         mRcBottomTabMenu.rotatePlusButton(this, false);
         mCoverView.startAnimation(AnimationUtils.loadAnimation(this,
               R.anim.cover_dismiss));
      }
   }

   @Override
   public void onAnimationEnd(int tab, boolean isSwitch, boolean isToUp) {
      if (isToUp) {
         mCoverView.setVisibility(View.VISIBLE);
      } else {
         if (isSwitch) {
            // setCurrentTab(tab);
         }
         mCoverView.setVisibility(View.GONE);
      }
   }

   @Override
   public void onRightButtonClicked() {

   }

   @Override
   public void onLeftButtonClicked() {

   }

   @Override
   public void onDropDownFilterClicked() {

   }

   private void saveFile(String str) {
      String fileName = Environment.getExternalStorageDirectory() + "/"
            + "log.txt";
      BufferedWriter writer = null;
      try {
         writer = new BufferedWriter(new FileWriter(fileName));
         writer.write(str);
         writer.flush();
      } catch (IOException ex) {
         System.out.println("=====ex="+ex);
      } finally {
         try {
            writer.close();
         } catch (IOException ex) {

         }
      }
   }

}

xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:rcm="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bgColorMain" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <com.ringcentral.android.utils.ui.menu.RCTitleBarWithDropDownFilter
            android:id="@+id/header"
            android:layout_width="fill_parent"
            android:layout_height="@dimen/header_hight"
            android:background="@color/bgTitleBar"
            rcm:title_has_dropdown="true"
            rcm:title_text="@string/messages_bar_item_all" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_below="@id/header"
            android:background="#cc6633" />
    </RelativeLayout>

    <View
        android:id="@+id/cover_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="@dimen/fragment_margin_bottom"
        android:background="#7f000000"
        android:visibility="gone" />

    <com.ringcentral.android.utils.ui.menu.RCBottomPopMenu
        android:id="@+id/rcBottomPopWidget"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="@dimen/fragment_margin_bottom"
        android:visibility="gone" />

    <com.ringcentral.android.utils.ui.menu.RCBottomTabMenu
        android:id="@+id/rcBottomTabBar"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/launch_bar_height"
        android:layout_gravity="bottom"
        android:orientation="horizontal" />

</FrameLayout>

buttomTabMenu的代码:

public class RCBottomTabMenu extends RCBottomMenu {

   private static final String TAG = "RCBottomTabMenu";
   private static final int SPLIT_INDEX = 1;
   private LinearLayout mLeftLayout;
   private LinearLayout mRightLayout;
   private ImageView mPlusBtn;
   private int mPadding = 0;
   private RCTabView mMessageItem;
   private OnTabClickListener mOnTabClickListener;

   public RCBottomTabMenu(Context context) {
      super(context);
      init(context);
   }

   public RCBottomTabMenu(Context context, AttributeSet attrs) {
      super(context, attrs);
      init(context);
   }

   public void setOnTabClickListener(OnTabClickListener listener) {
      mOnTabClickListener = listener;
   }

   private void init(Context context) {
      LayoutInflater.from(context).inflate(R.layout.ringcentral_bottom, this);
      this.setBackgroundColor(getResources().getColor(
            R.color.transparentColor));
      mPadding = context.getResources().getDimensionPixelSize(
            R.dimen.tab_item_padding);
      mPlusBtn = (ImageView) findViewById(R.id.btn_plus);
      View plusLayout = findViewById(R.id.layout_plus);
      plusLayout.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View v) {
            mOnTabClickListener.onPlusClick(false);
         }
      });
   }

   public void rotatePlusButton(Context context, boolean isUp) {
      AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(
            context, isUp ? R.anim.flip_down : R.anim.flip_up);
      animatorSet.setTarget(mPlusBtn);
      animatorSet.start();
   }

   public void addTabs(Context context, List<RCTabItem> list) {
      mLeftLayout = (LinearLayout) findViewById(R.id.left_layout);
      mRightLayout = (LinearLayout) findViewById(R.id.right_layout);
      mLeftLayout.removeAllViews();
      mRightLayout.removeAllViews();
      addMobileTabs(context, list);

   }

   private final OnClickListener mTabClickListener = new OnClickListener() {
      public void onClick(View view) {
         final int newSelected = ((RCTabView)view).getPosition();
         mOnTabClickListener.onTabClick(newSelected);
      }
   };

   private void addMobileTabs(Context context, List<RCTabItem> list) {
      for (int i = 0; i < BOTTOM_MENU_TAB_SUM; i++) {
         RCTabItem tabItem = list.get(i);
         RCTabView view = new RCTabView(context, tabItem.getItemId());
         view.setOnClickListener(mTabClickListener);
         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,
               ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
         params.gravity = CENTER_IN_PARENT;
         view.setLayoutParams(params);
         TextView textView = (TextView) view
               .findViewById(R.id.tab_main_text);
         textView.setText(tabItem.getItemText());
         Drawable drawable = context.getResources().getDrawable(
               tabItem.getItemIcon());
         if (drawable != null) {
            drawable.setBounds(0, 0, drawable.getMinimumWidth(),
                  drawable.getMinimumHeight());
         }
         textView.setCompoundDrawables(null, drawable, null, null);
         if (i <= SPLIT_INDEX) {
            mLeftLayout.addView(view);
         } else {
            mRightLayout.addView(view);
         }
      }
   }

   public void setItemSelectedState(int selectedItem) {
      final int leftCount = mLeftLayout.getChildCount();
      for (int i = 0; i < leftCount; i++) {
         final RCTabView tabItem = (RCTabView) mLeftLayout.getChildAt(i);
         if (selectedItem != tabItem.getPosition()) {
            tabItem.changeSelectedState(false);
         } else {
            tabItem.changeSelectedState(true);
         }
      }
      final int rightCount = leftCount + mRightLayout.getChildCount();
      for (int i = leftCount; i < rightCount; i++) {
         final RCTabView tabItem = (RCTabView) mRightLayout.getChildAt(i
               - leftCount);
         if (selectedItem != tabItem.getPosition()) {
            tabItem.changeSelectedState(false);
         } else {
            tabItem.changeSelectedState(true);
         }
      }
   }

}
public class RCBottomMenu extends RelativeLayout {
    protected static final int BOTTOM_MENU_TAB_SUM = 4;

    public RCBottomMenu(Context context) {
        super(context);
    }

    public RCBottomMenu(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void onUpdateIndicator() {}

    public interface OnTabClickListener {
        void onTabClick(int tab);
        void onPlusClick(boolean isFromMenu);
    }
}

animation的xml:

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false">
    <alpha
        android:toAlpha="1.0"
        android:fromAlpha="0.0"
        android:duration="150"/>
</set>

代码在:https://github.com/nickgao1986/StepSport

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP