android真实项目教程(七)——梦醒边缘花落_by_CJJ

大家下午好,我是CJJ,说说昨晚挑灯夜写毕业论文到凌晨三点多,当写到致谢词那块时,我违心的写下: 本论文在xxx导师的悉 心指导和亲切关怀下完成的。导师渊博的专业知识、严谨的治学态度,精益求精的工作作风,诲人不倦的高尚师德,严于律己、宽以待人的崇高风范,朴实无法、平易近人的人格魅力对本人影响深远。。。。。。”其实,我就只见了指导老师一面而已。。。。转回正题,写的这个app,就只剩下 SlideMenuFragment这块还没有任何东西 ,那么我们就填充它把。。。。     
          android真实项目教程(一)——App应用框架搭建_by_CJJ      http://www.apkbus.com/forum.php?mod=viewthread&tid=166151
           android真实项目教程(二)——漫画App初构_by_CJJ         http://www.apkbus.com/forum.php?mod=viewthread&tid=166262
           android真实项目教程(三)——首页初点缀_by_CJJ             http://www.apkbus.com/forum.php?mod=viewthread&tid=166630
          android真实项目教程(四)——MY APP MY STYLE_by_CJJ     http://www.apkbus.com/forum.php?mod=viewthread&tid=167676
          android真实项目教程(五)——有时三点两点雨_by_CJJ     
http://www.apkbus.com/forum.php?mod=viewthread&tid=168422         
         android真实项目教程(六)——落叶醉赤壁_by_CJJ           http://www.apkbus.com/android-168858-1-1.html
主要加入了两个功能:(1)设置头像,可以从相册选择,也可以相机拍摄;(2)ExpandableListView展开,item标明个功能模块。
效果如下图:
  


主要源码:
  1. <font size="4">package com.cjj.shopapp.fragment;


  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.os.Bundle;
  7. import android.support.v4.app.Fragment;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.widget.ExpandableListView;
  13. import android.widget.ImageView;
  14. import android.widget.TextView;

  15. import com.cjj.shopapp.activity.R;
  16. import com.cjj.shopapp.adapter.ExpandableListViewSlideMenuAdapter;
  17. import com.cjj.shopapp.utils.ImageCropUtils;

  18. public class SlideMenuFragment extends Fragment implements OnClickListener {
  19.         private ImageView img_head;
  20.         private TextView tv_title;
  21.         private AlertDialog headDialog;
  22.         private ImageCropUtils cropUtils;
  23.         private static final int OPEN_CAMERA = 0x101;
  24.         private static final int CUT_CAMERA_RESULT = 0x102;
  25.         private static final int CUT_GALLERY_RESULT = 0x103;
  26.         private Bitmap bitmap;
  27.         private ExpandableListView expandableListView;
  28.         private ExpandableListViewSlideMenuAdapter adapter;
  29.         private TextView tv_exit;

  30.         @Override
  31.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  32.                         Bundle savedInstanceState) {
  33.                 View v = inflater.inflate(R.layout.fragment_slide_menu, null);
  34.                 return v;
  35.         }

  36.         @Override
  37.         public void onActivityCreated(Bundle savedInstanceState) {
  38.                 super.onActivityCreated(savedInstanceState);
  39.                 adapter = new ExpandableListViewSlideMenuAdapter();
  40.                 expandableListView.setAdapter(adapter);
  41.                 expandableListView.setGroupIndicator(null);
  42.                 int groupCount = expandableListView.getCount();

  43.                 for (int i = 0; i < groupCount; i++) {
  44.                         expandableListView.expandGroup(i);
  45.                 }
  46.         }

  47.         @Override
  48.         public void onCreate(Bundle savedInstanceState) {
  49.                 super.onCreate(savedInstanceState);
  50.         }

  51.         @Override
  52.         public void onDestroyView() {
  53.                 img_head = null;
  54.                 tv_title = null;
  55.                 headDialog = null;
  56.                 cropUtils = null;
  57.                 bitmap = null;
  58.                 super.onDestroyView();
  59.         }

  60.         @Override
  61.         public void onViewCreated(View view, Bundle savedInstanceState) {
  62.                 super.onViewCreated(view, savedInstanceState);
  63.                 expandableListView = (ExpandableListView) view
  64.                                 .findViewById(R.id.elv_slide_menu);
  65.                 img_head = (ImageView) view.findViewById(R.id.img_head);
  66.                 tv_title = (TextView) view.findViewById(R.id.tv_title);
  67.                 tv_exit = (TextView) view.findViewById(R.id.tv_exit);
  68.                 tv_exit.setOnClickListener(this);
  69.                 tv_title.setOnClickListener(this);
  70.                 img_head.setOnClickListener(this);
  71.                 initAlertUserHeadDialog();
  72.                 cropUtils = new ImageCropUtils(getActivity());
  73.         }

  74.         @Override
  75.         public void onClick(View v) {
  76.                 switch (v.getId()) {
  77.                 case R.id.img_head:
  78.                 case R.id.tv_title:
  79.                         headDialog.show();
  80.                         break;
  81.                 case R.id.tv_exit:
  82.                         System.exit(0);
  83.                         break;
  84.                 }
  85.         }


  86.         /**
  87.          * 显示修改公会头像的对话框
  88.          */
  89.         private String[] photoItems = new String[] { "相册", "拍照" };

  90.         private void initAlertUserHeadDialog() {
  91.                 headDialog = new AlertDialog.Builder(getActivity()).setTitle("修改头像")
  92.                                 .setItems(photoItems, new DialogInterface.OnClickListener() {
  93.                                         @Override
  94.                                         public void onClick(DialogInterface dialog, int which) {

  95.                                                 dialog.dismiss();

  96.                                                 switch (which) {
  97.                                                 case 0: // 相册
  98.                                                         cropUtils
  99.                                                                         .openGalleryAndCropSmallPhoto(CUT_GALLERY_RESULT);
  100.                                                         break;

  101.                                                 case 1: // 拍照

  102.                                                         cropUtils.openCamera(OPEN_CAMERA);
  103.                                                         break;
  104.                                                 }
  105.                                         }
  106.                                 }).create();
  107.         }

  108.         @Override
  109.         public void onActivityResult(int requestCode, int resultCode, Intent data) {
  110.                 switch (requestCode) {
  111.                 case OPEN_CAMERA:// 从相机

  112.                         cropUtils.cropBigPhotoByCamera(CUT_CAMERA_RESULT);

  113.                         break;

  114.                 case CUT_CAMERA_RESULT:// 返回记过

  115.                         bitmap = cropUtils.getBitmapByUri();
  116.                         img_head.setImageBitmap(bitmap);

  117.                         break;

  118.                 case CUT_GALLERY_RESULT:

  119.                         if (data != null) {
  120.                                 bitmap = cropUtils.getBitmapByIntent(data);
  121.                                 img_head.setImageBitmap(bitmap);
  122.                         }

  123.                         break;
  124.                 }

  125.                 super.onActivityResult(requestCode, resultCode, data);
  126.         }

  127. }</font>
复制代码
  1. package com.cjj.shopapp.fragment;


  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.graphics.Bitmap;
  6. import android.os.Bundle;
  7. import android.support.v4.app.Fragment;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.View.OnClickListener;
  11. import android.view.ViewGroup;
  12. import android.widget.ExpandableListView;
  13. import android.widget.ImageView;
  14. import android.widget.TextView;

  15. import com.cjj.shopapp.activity.R;
  16. import com.cjj.shopapp.adapter.ExpandableListViewSlideMenuAdapter;
  17. import com.cjj.shopapp.utils.ImageCropUtils;

  18. public class SlideMenuFragment extends Fragment implements OnClickListener {
  19.         private ImageView img_head;
  20.         private TextView tv_title;
  21.         private AlertDialog headDialog;
  22.         private ImageCropUtils cropUtils;
  23.         private static final int OPEN_CAMERA = 0x101;
  24.         private static final int CUT_CAMERA_RESULT = 0x102;
  25.         private static final int CUT_GALLERY_RESULT = 0x103;
  26.         private Bitmap bitmap;
  27.         private ExpandableListView expandableListView;
  28.         private ExpandableListViewSlideMenuAdapter adapter;
  29.         private TextView tv_exit;

  30.         @Override
  31.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  32.                         Bundle savedInstanceState) {
  33.                 View v = inflater.inflate(R.layout.fragment_slide_menu, null);
  34.                 return v;
  35.         }

  36.         @Override
  37.         public void onActivityCreated(Bundle savedInstanceState) {
  38.                 super.onActivityCreated(savedInstanceState);
  39.                 adapter = new ExpandableListViewSlideMenuAdapter();
  40.                 expandableListView.setAdapter(adapter);
  41.                 expandableListView.setGroupIndicator(null);
  42.                 int groupCount = expandableListView.getCount();

  43.                 for (int i = 0; i < groupCount; i++) {
  44.                         expandableListView.expandGroup(i);
  45.                 }
  46.         }

  47.         @Override
  48.         public void onCreate(Bundle savedInstanceState) {
  49.                 super.onCreate(savedInstanceState);
  50.         }

  51.         @Override
  52.         public void onDestroyView() {
  53.                 img_head = null;
  54.                 tv_title = null;
  55.                 headDialog = null;
  56.                 cropUtils = null;
  57.                 bitmap = null;
  58.                 super.onDestroyView();
  59.         }

  60.         @Override
  61.         public void onViewCreated(View view, Bundle savedInstanceState) {
  62.                 super.onViewCreated(view, savedInstanceState);
  63.                 expandableListView = (ExpandableListView) view
  64.                                 .findViewById(R.id.elv_slide_menu);
  65.                 img_head = (ImageView) view.findViewById(R.id.img_head);
  66.                 tv_title = (TextView) view.findViewById(R.id.tv_title);
  67.                 tv_exit = (TextView) view.findViewById(R.id.tv_exit);
  68.                 tv_exit.setOnClickListener(this);
  69.                 tv_title.setOnClickListener(this);
  70.                 img_head.setOnClickListener(this);
  71.                 initAlertUserHeadDialog();
  72.                 cropUtils = new ImageCropUtils(getActivity());
  73.         }

  74.         @Override
  75.         public void onClick(View v) {
  76.                 switch (v.getId()) {
  77.                 case R.id.img_head:
  78.                 case R.id.tv_title:
  79.                         headDialog.show();
  80.                         break;
  81.                 case R.id.tv_exit:
  82.                         System.exit(0);
  83.                         break;
  84.                 }
  85.         }


  86.         /**
  87.          * 显示修改公会头像的对话框
  88.          */
  89.         private String[] photoItems = new String[] { "相册", "拍照" };

  90.         private void initAlertUserHeadDialog() {
  91.                 headDialog = new AlertDialog.Builder(getActivity()).setTitle("修改头像")
  92.                                 .setItems(photoItems, new DialogInterface.OnClickListener() {
  93.                                         @Override
  94.                                         public void onClick(DialogInterface dialog, int which) {

  95.                                                 dialog.dismiss();

  96.                                                 switch (which) {
  97.                                                 case 0: // 相册
  98.                                                         cropUtils
  99.                                                                         .openGalleryAndCropSmallPhoto(CUT_GALLERY_RESULT);
  100.                                                         break;

  101.                                                 case 1: // 拍照

  102.                                                         cropUtils.openCamera(OPEN_CAMERA);
  103.                                                         break;
  104.                                                 }
  105.                                         }
  106.                                 }).create();
  107.         }

  108.         @Override
  109.         public void onActivityResult(int requestCode, int resultCode, Intent data) {
  110.                 switch (requestCode) {
  111.                 case OPEN_CAMERA:// 从相机

  112.                         cropUtils.cropBigPhotoByCamera(CUT_CAMERA_RESULT);

  113.                         break;

  114.                 case CUT_CAMERA_RESULT:// 返回记过

  115.                         bitmap = cropUtils.getBitmapByUri();
  116.                         img_head.setImageBitmap(bitmap);

  117.                         break;

  118.                 case CUT_GALLERY_RESULT:

  119.                         if (data != null) {
  120.                                 bitmap = cropUtils.getBitmapByIntent(data);
  121.                                 img_head.setImageBitmap(bitmap);
  122.                         }

  123.                         break;
  124.                 }

  125.                 super.onActivityResult(requestCode, resultCode, data);
  126.         }

  127. }
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="match_parent"
  5.     android:background="@drawable/navigation_background"
  6.     android:orientation="vertical" >

  7.     <include layout="@layout/ab_slide_menu" />

  8.     <View
  9.         android:id="@+id/ab_top_line"
  10.         android:layout_width="match_parent"
  11.         android:layout_height="2.0px"
  12.         android:background="@drawable/menu_divid_line" />

  13.     <ExpandableListView
  14.         android:id="@+id/elv_slide_menu"
  15.         android:layout_width="match_parent"
  16.         android:layout_height="match_parent"
  17.         android:layout_weight="1"
  18.         android:cacheColorHint="@android:color/transparent"
  19.         android:divider="@android:color/transparent"
  20.         android:fadingEdge="none"
  21.         android:listSelector="@android:color/transparent"
  22.         android:scrollbars="none" />

  23.     <View
  24.         android:id="@+id/ab_bottom_line"
  25.         android:layout_width="match_parent"
  26.         android:layout_height="1.0px"
  27.         android:layout_above="@+id/ab_bottom"
  28.         android:background="#ff3d3d3d" />

  29.     <include layout="@layout/item_menu_slide" />

  30. </LinearLayout>
复制代码
  1. package com.cjj.shopapp.adapter;

  2. import android.content.Context;
  3. import android.graphics.drawable.Drawable;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.ViewGroup;
  8. import android.widget.BaseExpandableListAdapter;
  9. import android.widget.TextView;
  10. import android.widget.Toast;

  11. import com.cjj.shopapp.activity.MainActivity;
  12. import com.cjj.shopapp.activity.R;
  13. import com.cjj.shopapp.fragment.AboutFragment;
  14. import com.cjj.shopapp.fragment.CategoryFragment;
  15. import com.cjj.shopapp.fragment.HotFragment;

  16. public class ExpandableListViewSlideMenuAdapter extends
  17.                 BaseExpandableListAdapter implements OnClickListener {
  18.         private Context mContext;
  19.         private MainActivity mGroupActivity;
  20.         private static final String[] title = new String[] { "功能", "其他" };
  21.         private static final String[][] msg = new String[][] {
  22.                         { "主界面", "分类", "热门", "关于" }, { "分享", "反馈", "更多" } };

  23.         private static final int[][] icon = new int[][] {
  24.                         { R.drawable.menu_home, R.drawable.slide_allgoods,
  25.                                         R.drawable.menu_shop_order, R.drawable.menu_enter_order },
  26.                         {  R.drawable.menu_message, R.drawable.menu_aler_user_info,
  27.                                         R.drawable.menu_shop_commend, } };

  28.         @Override
  29.         public int getGroupCount() {
  30.                 return title.length;
  31.         }

  32.         @Override
  33.         public int getChildrenCount(int groupPosition) {
  34.                 return msg[groupPosition].length;
  35.         }

  36.         @Override
  37.         public String getGroup(int groupPosition) {
  38.                 // TODO Auto-generated method stub
  39.                 return title[groupPosition];
  40.         }

  41.         @Override
  42.         public String getChild(int groupPosition, int childPosition) {
  43.                 // TODO Auto-generated method stub
  44.                 return msg[groupPosition][childPosition];
  45.         }

  46.         @Override
  47.         public long getGroupId(int groupPosition) {
  48.                 // TODO Auto-generated method stub
  49.                 return 0;
  50.         }

  51.         @Override
  52.         public long getChildId(int groupPosition, int childPosition) {
  53.                 // TODO Auto-generated method stub
  54.                 return 0;
  55.         }

  56.         @Override
  57.         public boolean hasStableIds() {
  58.                 // TODO Auto-generated method stub
  59.                 return false;
  60.         }

  61.         @Override
  62.         public View getGroupView(int groupPosition, boolean isExpanded,
  63.                         View convertView, ViewGroup parent) {

  64.                 mContext = parent.getContext();
  65.                 mGroupActivity = (MainActivity) mContext;

  66.                 if (convertView == null) {
  67.                         convertView = LayoutInflater.from(parent.getContext()).inflate(
  68.                                         R.layout.item_elv_slide_menu_group, null);
  69.                         mGroupHolder = new GroupHolder();
  70.                         mGroupHolder.tv_menuGroup = (TextView) convertView
  71.                                         .findViewById(R.id.tv_menuGroup);
  72.                         mGroupHolder.ab_top_line = convertView
  73.                                         .findViewById(R.id.ab_top_line);
  74.                         convertView.setTag(mGroupHolder);
  75.                 } else {
  76.                         mGroupHolder = (GroupHolder) convertView.getTag();
  77.                 }

  78.                 String groupName = getGroup(groupPosition);
  79.                 mGroupHolder.tv_menuGroup.setText(groupName);

  80.                 return convertView;
  81.         }

  82.         @Override
  83.         public View getChildView(int groupPosition, int childPosition,
  84.                         boolean isLastChild, View convertView, ViewGroup parent) {
  85.                 if (convertView == null) {
  86.                         convertView = LayoutInflater.from(parent.getContext()).inflate(
  87.                                         R.layout.item_elv_slide_menu_child, null);
  88.                         mChildHolder = new ChildHolder();
  89.                         mChildHolder.tv_menuChild = (TextView) convertView
  90.                                         .findViewById(R.id.tv_menuChild);
  91.                         mChildHolder.ab_top_line = convertView
  92.                                         .findViewById(R.id.ab_top_line);
  93.                         convertView.setTag(mChildHolder);
  94.                 } else {
  95.                         mChildHolder = (ChildHolder) convertView.getTag();
  96.                 }

  97.                 String childName = getChild(groupPosition, childPosition);

  98.                 mChildHolder.tv_menuChild.setText(childName);
  99.                 drawLeftByTextView(mChildHolder.tv_menuChild,
  100.                                 icon[groupPosition][childPosition]);
  101.                 mChildHolder.tv_menuChild.setTag(groupPosition + "," + childPosition);
  102.                 mChildHolder.tv_menuChild.setOnClickListener(this);

  103.                 return convertView;
  104.         }

  105.         private void drawLeftByTextView(TextView mTextView, int resource) {
  106.                 Drawable mDrawable = mContext.getResources().getDrawable(resource);
  107.                 mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(),
  108.                                 mDrawable.getIntrinsicHeight());
  109.                 mTextView.setCompoundDrawables(mDrawable, null, null, null);
  110.         }

  111.         @Override
  112.         public boolean isChildSelectable(int groupPosition, int childPosition) {
  113.                 // TODO Auto-generated method stub
  114.                 return false;
  115.         }

  116.         private class GroupHolder {
  117.                 private TextView tv_menuGroup;
  118.                 private View ab_top_line;
  119.         }

  120.         private class ChildHolder {
  121.                 private TextView tv_menuChild;
  122.                 private View ab_top_line;
  123.         }

  124.         private GroupHolder mGroupHolder;
  125.         private ChildHolder mChildHolder;

  126.         @Override
  127.         public void onClick(View v) {

  128.                 String tag = v.getTag().toString();
  129.                 String[] strTag = tag.split(",");
  130.                 int childPosition = Integer.parseInt(strTag[1].toString());
  131.                 int groupPosition = Integer.parseInt(strTag[0].toString());

  132.                 if (groupPosition == 0) {
  133.                         if (childPosition == 0) {
  134.                                 mGroupActivity.switchNewFragment(mGroupActivity
  135.                                                 .createNewHomeFragment());
  136.                         } else if (childPosition == 1) {
  137.                                 mGroupActivity.switchNewFragment(new CategoryFragment());
  138.                         } else if (childPosition == 2) {
  139.                                 mGroupActivity.switchNewFragment(new HotFragment());
  140.                         } else if (childPosition == 3) {
  141.                                 mGroupActivity.switchNewFragment(new AboutFragment());
  142.                         }
  143.                 } else {
  144.                         if (childPosition == 0) {
  145.                                 Toast.makeText(mContext, "待开发", 1000).show();
  146.                         } else if (childPosition == 1) {
  147.                                 Toast.makeText(mContext, "待开发", 1000).show();
  148.                         } else if (childPosition == 2) {
  149.                                 Toast.makeText(mContext, "待开发", 1000).show();
  150.                         }
  151.                 }

  152.         }

  153. }
复制代码

没多少东西,你看看源码就能知道它怎么实现的了。呵呵。。。如果可以,我们一起加油把。。。。
源码:
本帖隐藏的内容
由于文件过大,库包没有传上来:   v_7.rar (13.38 MB, 下载次数: 30) 
cdsn有我上传的完整版: http://download.csdn.net/detail/junjichen/7297495



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值