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标明个功能模块。
效果如下图:
主要源码:
-
<font size="4">package com.cjj.shopapp.fragment;
-
-
-
import android.app.AlertDialog;
-
import android.content.DialogInterface;
-
import android.content.Intent;
-
import android.graphics.Bitmap;
-
import android.os.Bundle;
-
import android.support.v4.app.Fragment;
-
import android.view.LayoutInflater;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.view.ViewGroup;
-
import android.widget.ExpandableListView;
-
import android.widget.ImageView;
-
import android.widget.TextView;
-
-
import com.cjj.shopapp.activity.R;
-
import com.cjj.shopapp.adapter.ExpandableListViewSlideMenuAdapter;
-
import com.cjj.shopapp.utils.ImageCropUtils;
-
-
public class SlideMenuFragment extends Fragment implements OnClickListener {
-
private ImageView img_head;
-
private TextView tv_title;
-
private AlertDialog headDialog;
-
private ImageCropUtils cropUtils;
-
private static final int OPEN_CAMERA = 0x101;
-
private static final int CUT_CAMERA_RESULT = 0x102;
-
private static final int CUT_GALLERY_RESULT = 0x103;
-
private Bitmap bitmap;
-
private ExpandableListView expandableListView;
-
private ExpandableListViewSlideMenuAdapter adapter;
-
private TextView tv_exit;
-
-
@Override
-
public View onCreateView(LayoutInflater inflater, ViewGroup container,
-
Bundle savedInstanceState) {
-
View v = inflater.inflate(R.layout.fragment_slide_menu, null);
-
return v;
-
}
-
-
@Override
-
public void onActivityCreated(Bundle savedInstanceState) {
-
super.onActivityCreated(savedInstanceState);
-
adapter = new ExpandableListViewSlideMenuAdapter();
-
expandableListView.setAdapter(adapter);
-
expandableListView.setGroupIndicator(null);
-
int groupCount = expandableListView.getCount();
-
-
for (int i = 0; i < groupCount; i++) {
-
expandableListView.expandGroup(i);
-
}
-
}
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
}
-
-
@Override
-
public void onDestroyView() {
-
img_head = null;
-
tv_title = null;
-
headDialog = null;
-
cropUtils = null;
-
bitmap = null;
-
super.onDestroyView();
-
}
-
-
@Override
-
public void onViewCreated(View view, Bundle savedInstanceState) {
-
super.onViewCreated(view, savedInstanceState);
-
expandableListView = (ExpandableListView) view
-
.findViewById(R.id.elv_slide_menu);
-
img_head = (ImageView) view.findViewById(R.id.img_head);
-
tv_title = (TextView) view.findViewById(R.id.tv_title);
-
tv_exit = (TextView) view.findViewById(R.id.tv_exit);
-
tv_exit.setOnClickListener(this);
-
tv_title.setOnClickListener(this);
-
img_head.setOnClickListener(this);
-
initAlertUserHeadDialog();
-
cropUtils = new ImageCropUtils(getActivity());
-
}
-
-
@Override
-
public void onClick(View v) {
-
switch (v.getId()) {
-
case R.id.img_head:
-
case R.id.tv_title:
-
headDialog.show();
-
break;
-
case R.id.tv_exit:
-
System.exit(0);
-
break;
-
}
-
}
-
-
-
/**
-
* 显示修改公会头像的对话框
-
*/
-
private String[] photoItems = new String[] { "相册", "拍照" };
-
-
private void initAlertUserHeadDialog() {
-
headDialog = new AlertDialog.Builder(getActivity()).setTitle("修改头像")
-
.setItems(photoItems, new DialogInterface.OnClickListener() {
-
@Override
-
public void onClick(DialogInterface dialog, int which) {
-
-
dialog.dismiss();
-
-
switch (which) {
-
case 0: // 相册
-
cropUtils
-
.openGalleryAndCropSmallPhoto(CUT_GALLERY_RESULT);
-
break;
-
-
case 1: // 拍照
-
-
cropUtils.openCamera(OPEN_CAMERA);
-
break;
-
}
-
}
-
}).create();
-
}
-
-
@Override
-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
-
switch (requestCode) {
-
case OPEN_CAMERA:// 从相机
-
-
cropUtils.cropBigPhotoByCamera(CUT_CAMERA_RESULT);
-
-
break;
-
-
case CUT_CAMERA_RESULT:// 返回记过
-
-
bitmap = cropUtils.getBitmapByUri();
-
img_head.setImageBitmap(bitmap);
-
-
break;
-
-
case CUT_GALLERY_RESULT:
-
-
if (data != null) {
-
bitmap = cropUtils.getBitmapByIntent(data);
-
img_head.setImageBitmap(bitmap);
-
}
-
-
break;
-
}
-
-
super.onActivityResult(requestCode, resultCode, data);
-
}
-
-
}</font>
-
package com.cjj.shopapp.fragment;
-
-
-
import android.app.AlertDialog;
-
import android.content.DialogInterface;
-
import android.content.Intent;
-
import android.graphics.Bitmap;
-
import android.os.Bundle;
-
import android.support.v4.app.Fragment;
-
import android.view.LayoutInflater;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.view.ViewGroup;
-
import android.widget.ExpandableListView;
-
import android.widget.ImageView;
-
import android.widget.TextView;
-
-
import com.cjj.shopapp.activity.R;
-
import com.cjj.shopapp.adapter.ExpandableListViewSlideMenuAdapter;
-
import com.cjj.shopapp.utils.ImageCropUtils;
-
-
public class SlideMenuFragment extends Fragment implements OnClickListener {
-
private ImageView img_head;
-
private TextView tv_title;
-
private AlertDialog headDialog;
-
private ImageCropUtils cropUtils;
-
private static final int OPEN_CAMERA = 0x101;
-
private static final int CUT_CAMERA_RESULT = 0x102;
-
private static final int CUT_GALLERY_RESULT = 0x103;
-
private Bitmap bitmap;
-
private ExpandableListView expandableListView;
-
private ExpandableListViewSlideMenuAdapter adapter;
-
private TextView tv_exit;
-
-
@Override
-
public View onCreateView(LayoutInflater inflater, ViewGroup container,
-
Bundle savedInstanceState) {
-
View v = inflater.inflate(R.layout.fragment_slide_menu, null);
-
return v;
-
}
-
-
@Override
-
public void onActivityCreated(Bundle savedInstanceState) {
-
super.onActivityCreated(savedInstanceState);
-
adapter = new ExpandableListViewSlideMenuAdapter();
-
expandableListView.setAdapter(adapter);
-
expandableListView.setGroupIndicator(null);
-
int groupCount = expandableListView.getCount();
-
-
for (int i = 0; i < groupCount; i++) {
-
expandableListView.expandGroup(i);
-
}
-
}
-
-
@Override
-
public void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
}
-
-
@Override
-
public void onDestroyView() {
-
img_head = null;
-
tv_title = null;
-
headDialog = null;
-
cropUtils = null;
-
bitmap = null;
-
super.onDestroyView();
-
}
-
-
@Override
-
public void onViewCreated(View view, Bundle savedInstanceState) {
-
super.onViewCreated(view, savedInstanceState);
-
expandableListView = (ExpandableListView) view
-
.findViewById(R.id.elv_slide_menu);
-
img_head = (ImageView) view.findViewById(R.id.img_head);
-
tv_title = (TextView) view.findViewById(R.id.tv_title);
-
tv_exit = (TextView) view.findViewById(R.id.tv_exit);
-
tv_exit.setOnClickListener(this);
-
tv_title.setOnClickListener(this);
-
img_head.setOnClickListener(this);
-
initAlertUserHeadDialog();
-
cropUtils = new ImageCropUtils(getActivity());
-
}
-
-
@Override
-
public void onClick(View v) {
-
switch (v.getId()) {
-
case R.id.img_head:
-
case R.id.tv_title:
-
headDialog.show();
-
break;
-
case R.id.tv_exit:
-
System.exit(0);
-
break;
-
}
-
}
-
-
-
/**
-
* 显示修改公会头像的对话框
-
*/
-
private String[] photoItems = new String[] { "相册", "拍照" };
-
-
private void initAlertUserHeadDialog() {
-
headDialog = new AlertDialog.Builder(getActivity()).setTitle("修改头像")
-
.setItems(photoItems, new DialogInterface.OnClickListener() {
-
@Override
-
public void onClick(DialogInterface dialog, int which) {
-
-
dialog.dismiss();
-
-
switch (which) {
-
case 0: // 相册
-
cropUtils
-
.openGalleryAndCropSmallPhoto(CUT_GALLERY_RESULT);
-
break;
-
-
case 1: // 拍照
-
-
cropUtils.openCamera(OPEN_CAMERA);
-
break;
-
}
-
}
-
}).create();
-
}
-
-
@Override
-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
-
switch (requestCode) {
-
case OPEN_CAMERA:// 从相机
-
-
cropUtils.cropBigPhotoByCamera(CUT_CAMERA_RESULT);
-
-
break;
-
-
case CUT_CAMERA_RESULT:// 返回记过
-
-
bitmap = cropUtils.getBitmapByUri();
-
img_head.setImageBitmap(bitmap);
-
-
break;
-
-
case CUT_GALLERY_RESULT:
-
-
if (data != null) {
-
bitmap = cropUtils.getBitmapByIntent(data);
-
img_head.setImageBitmap(bitmap);
-
}
-
-
break;
-
}
-
-
super.onActivityResult(requestCode, resultCode, data);
-
}
-
-
}
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:background="@drawable/navigation_background"
-
android:orientation="vertical" >
-
-
<include layout="@layout/ab_slide_menu" />
-
-
<View
-
android:id="@+id/ab_top_line"
-
android:layout_width="match_parent"
-
android:layout_height="2.0px"
-
android:background="@drawable/menu_divid_line" />
-
-
<ExpandableListView
-
android:id="@+id/elv_slide_menu"
-
android:layout_width="match_parent"
-
android:layout_height="match_parent"
-
android:layout_weight="1"
-
android:cacheColorHint="@android:color/transparent"
-
android:divider="@android:color/transparent"
-
android:fadingEdge="none"
-
android:listSelector="@android:color/transparent"
-
android:scrollbars="none" />
-
-
<View
-
android:id="@+id/ab_bottom_line"
-
android:layout_width="match_parent"
-
android:layout_height="1.0px"
-
android:layout_above="@+id/ab_bottom"
-
android:background="#ff3d3d3d" />
-
-
<include layout="@layout/item_menu_slide" />
-
- </LinearLayout>
-
package com.cjj.shopapp.adapter;
-
-
import android.content.Context;
-
import android.graphics.drawable.Drawable;
-
import android.view.LayoutInflater;
-
import android.view.View;
-
import android.view.View.OnClickListener;
-
import android.view.ViewGroup;
-
import android.widget.BaseExpandableListAdapter;
-
import android.widget.TextView;
-
import android.widget.Toast;
-
-
import com.cjj.shopapp.activity.MainActivity;
-
import com.cjj.shopapp.activity.R;
-
import com.cjj.shopapp.fragment.AboutFragment;
-
import com.cjj.shopapp.fragment.CategoryFragment;
-
import com.cjj.shopapp.fragment.HotFragment;
-
-
public class ExpandableListViewSlideMenuAdapter extends
-
BaseExpandableListAdapter implements OnClickListener {
-
private Context mContext;
-
private MainActivity mGroupActivity;
-
private static final String[] title = new String[] { "功能", "其他" };
-
private static final String[][] msg = new String[][] {
-
{ "主界面", "分类", "热门", "关于" }, { "分享", "反馈", "更多" } };
-
-
private static final int[][] icon = new int[][] {
-
{ R.drawable.menu_home, R.drawable.slide_allgoods,
-
R.drawable.menu_shop_order, R.drawable.menu_enter_order },
-
{R.drawable.menu_message, R.drawable.menu_aler_user_info,
-
R.drawable.menu_shop_commend, } };
-
-
@Override
-
public int getGroupCount() {
-
return title.length;
-
}
-
-
@Override
-
public int getChildrenCount(int groupPosition) {
-
return msg[groupPosition].length;
-
}
-
-
@Override
-
public String getGroup(int groupPosition) {
-
// TODO Auto-generated method stub
-
return title[groupPosition];
-
}
-
-
@Override
-
public String getChild(int groupPosition, int childPosition) {
-
// TODO Auto-generated method stub
-
return msg[groupPosition][childPosition];
-
}
-
-
@Override
-
public long getGroupId(int groupPosition) {
-
// TODO Auto-generated method stub
-
return 0;
-
}
-
-
@Override
-
public long getChildId(int groupPosition, int childPosition) {
-
// TODO Auto-generated method stub
-
return 0;
-
}
-
-
@Override
-
public boolean hasStableIds() {
-
// TODO Auto-generated method stub
-
return false;
-
}
-
-
@Override
-
public View getGroupView(int groupPosition, boolean isExpanded,
-
View convertView, ViewGroup parent) {
-
-
mContext = parent.getContext();
-
mGroupActivity = (MainActivity) mContext;
-
-
if (convertView == null) {
-
convertView = LayoutInflater.from(parent.getContext()).inflate(
-
R.layout.item_elv_slide_menu_group, null);
-
mGroupHolder = new GroupHolder();
-
mGroupHolder.tv_menuGroup = (TextView) convertView
-
.findViewById(R.id.tv_menuGroup);
-
mGroupHolder.ab_top_line = convertView
-
.findViewById(R.id.ab_top_line);
-
convertView.setTag(mGroupHolder);
-
} else {
-
mGroupHolder = (GroupHolder) convertView.getTag();
-
}
-
-
String groupName = getGroup(groupPosition);
-
mGroupHolder.tv_menuGroup.setText(groupName);
-
-
return convertView;
-
}
-
-
@Override
-
public View getChildView(int groupPosition, int childPosition,
-
boolean isLastChild, View convertView, ViewGroup parent) {
-
if (convertView == null) {
-
convertView = LayoutInflater.from(parent.getContext()).inflate(
-
R.layout.item_elv_slide_menu_child, null);
-
mChildHolder = new ChildHolder();
-
mChildHolder.tv_menuChild = (TextView) convertView
-
.findViewById(R.id.tv_menuChild);
-
mChildHolder.ab_top_line = convertView
-
.findViewById(R.id.ab_top_line);
-
convertView.setTag(mChildHolder);
-
} else {
-
mChildHolder = (ChildHolder) convertView.getTag();
-
}
-
-
String childName = getChild(groupPosition, childPosition);
-
-
mChildHolder.tv_menuChild.setText(childName);
-
drawLeftByTextView(mChildHolder.tv_menuChild,
-
icon[groupPosition][childPosition]);
-
mChildHolder.tv_menuChild.setTag(groupPosition + "," + childPosition);
-
mChildHolder.tv_menuChild.setOnClickListener(this);
-
-
return convertView;
-
}
-
-
private void drawLeftByTextView(TextView mTextView, int resource) {
-
Drawable mDrawable = mContext.getResources().getDrawable(resource);
-
mDrawable.setBounds(0, 0, mDrawable.getIntrinsicWidth(),
-
mDrawable.getIntrinsicHeight());
-
mTextView.setCompoundDrawables(mDrawable, null, null, null);
-
}
-
-
@Override
-
public boolean isChildSelectable(int groupPosition, int childPosition) {
-
// TODO Auto-generated method stub
-
return false;
-
}
-
-
private class GroupHolder {
-
private TextView tv_menuGroup;
-
private View ab_top_line;
-
}
-
-
private class ChildHolder {
-
private TextView tv_menuChild;
-
private View ab_top_line;
-
}
-
-
private GroupHolder mGroupHolder;
-
private ChildHolder mChildHolder;
-
-
@Override
-
public void onClick(View v) {
-
-
String tag = v.getTag().toString();
-
String[] strTag = tag.split(",");
-
int childPosition = Integer.parseInt(strTag[1].toString());
-
int groupPosition = Integer.parseInt(strTag[0].toString());
-
-
if (groupPosition == 0) {
-
if (childPosition == 0) {
-
mGroupActivity.switchNewFragment(mGroupActivity
-
.createNewHomeFragment());
-
} else if (childPosition == 1) {
-
mGroupActivity.switchNewFragment(new CategoryFragment());
-
} else if (childPosition == 2) {
-
mGroupActivity.switchNewFragment(new HotFragment());
-
} else if (childPosition == 3) {
-
mGroupActivity.switchNewFragment(new AboutFragment());
-
}
-
} else {
-
if (childPosition == 0) {
-
Toast.makeText(mContext, "待开发", 1000).show();
-
} else if (childPosition == 1) {
-
Toast.makeText(mContext, "待开发", 1000).show();
-
} else if (childPosition == 2) {
-
Toast.makeText(mContext, "待开发", 1000).show();
-
}
-
}
-
-
}
-
-
}
没多少东西,你看看源码就能知道它怎么实现的了。呵呵。。。如果可以,我们一起加油把。。。。
源码:
本帖隐藏的内容
由于文件过大,库包没有传上来:cdsn有我上传的完整版:http://download.csdn.net/detail/junjichen/7297495