您的位置:首页 > 移动开发 > 微信开发

Android之粗仿微信6.0——微信分界面

2016-06-18 16:29 555 查看
上一篇主界面我们弄好了,四个分界面还是空空如也。这里就加上四个简单的分界面。

一、设计

     微信分界面,有微信、通讯录、发现、我四个频道,这里我们全部采用ListView的方式来实现。

     先看一下最后的效果图:


   



   


二、实施

       四个频道,第一个频道是一种样式、第二个是一种样式、三、四样式是类似的。先看第一频道的实现。

(1)第一频道

        主要在于ListView适配的设置,如下:

package com.example.custom;

import java.util.List;

import com.example.bean.ChatBean;
import com.example.wechat.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyChatAdapter extends ArrayAdapter<ChatBean>{

Context context;
int resource;
List<ChatBean> objects;
public MyChatAdapter(Context context, int resource, List<ChatBean> objects) {
super(context, resource, objects);
this.context=context;
this.resource=resource;
this.objects=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ImageView imageView;
TextView title;
TextView content;
TextView time;

if(convertView!=null){
view=convertView;
}
else {
view=LayoutInflater.from(context).inflate(resource, null);
}
imageView=(ImageView)view.findViewById(R.id.item_img);
title=(TextView)view.findViewById(R.id.item_title);
content=(TextView)view.findViewById(R.id.item_content);
time=(TextView)view.findViewById(R.id.item_time);
imageView.setImageResource(objects.get(position).getResourceId());
title.setText(objects.get(position).getTitle());
content.setText(objects.get(position).getContent());
time.setText(objects.get(position).getTime());

return view;
}

}
适配的xml文件如下:
<?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:orientation="horizontal" >

<ImageView
android:id="@+id/item_img"
android:layout_width="64dp"
android:layout_height="64dp"
android:src="@drawable/default_useravatar"
/>

<LinearLayout
android:id="@+id/item_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_weight="4"
android:orientation="vertical"
>
<TextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:text="霸先公"
android:singleLine="true"
android:textColor="#353535"
android:textSize="16sp"

/>
<TextView
android:id="@+id/item_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:singleLine="true"
android:ellipsize="end"
android:text="我是怒苍山秦霸先!"
android:textColor="#AAAAAA"
android:textSize="14sp"
/>
</LinearLayout>

<TextView
android:id="@+id/item_time"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center"
android:textColor="#AAAAAA"
android:textSize="12sp"
android:text="昨天"
/>
</LinearLayout>
之后,在对应的fragment中添加代码即可:
package com.example.wechat;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.bean.ChatBean;
import com.example.custom.MyChatAdapter;

public class Fragment1 extends Fragment{

private ListView mListView;
private View view;
private ArrayAdapter<ChatBean> adapter;
private List<ChatBean> objects;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
view= inflater.inflate(R.layout.fragment_1, container, false);
return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mListView=(ListView)view.findViewById(R.id.myListView);
objects=new ArrayList<ChatBean>();
ChatBean chatBean=new ChatBean();
chatBean.setResourceId(R.drawable.default_useravatar);
chatBean.setTitle("秦霸先");
chatBean.setContent("我是怒苍山主");
chatBean.setTime("昨天");
objects.add(chatBean);

chatBean=new ChatBean();
chatBean.setResourceId(R.drawable.default_useravatar);
chatBean.setTitle("石刚");
chatBean.setContent("我是怒苍山五虎上将气冲塞北石刚");
chatBean.setTime("昨天");
objects.add(chatBean);

chatBean=new ChatBean();
chatBean.setResourceId(R.drawable.default_useravatar);
chatBean.setTitle("韩毅");
chatBean.setContent("我是怒苍山五虎上将小吕布韩毅");
chatBean.setTime("昨天");
objects.add(chatBean);

adapter=new MyChatAdapter(getActivity(), R.layout.item_chat, objects);
mListView.setAdapter(adapter);
}

}
至此,第一频道完成。
(2)第二频道

这个频道比较麻烦一些,因为这里有一个类似电话本的分组,以及界面往上滑动时,有首字母碰撞覆盖的效果。

这里就用到SectionIndexer接口用于分组索引,AlphabetIndexer是SectionIndexer的实现,在代码中会用到。

代码如下:

package com.example.wechat;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AlphabetIndexer;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.example.bean.UserBean;
import com.example.custom.MyConnectAdapter;
import com.example.custom.MyCursor;

public class Fragment2 extends Fragment{

LinearLayout titleLayout;
TextView title;
ListView mListView;
//适配
ArrayAdapter<UserBean> mAdapter;
//分组
AlphabetIndexer alphabetIndexer;
//分组标签
String alphabet="ABCDEFGHIGKLMNOPQRSTUVWXYZ#";
int lastFirstVisibleItem=-1;
ImageButton alphabetButton;
RelativeLayout sectionToastLayout;
TextView sectionToastText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_2, container, false);
titleLayout=(LinearLayout)view.findViewById(R.id.title_layout);
titleLayout.bringToFront();
title=(TextView)view.findViewById(R.id.title);
mListView=(ListView)view.findViewById(R.id.contectListView);

alphabetButton=(ImageButton)view.findViewById(R.id.az);
sectionToastLayout=(RelativeLayout)view.findViewById(R.id.az_toast_layout);
sectionToastText=(TextView)view.findViewById(R.id.az_toast);
return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//构造数据源
List<UserBean> listUserBeans=new ArrayList<UserBean>();
UserBean userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("B");
userBean.setUser("Boll");
listUserBeans.add(userBean);

userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("A");
userBean.setUser("Allen");
listUserBeans.add(userBean);

userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("Z");
userBean.setUser("Zippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);

userBean.setSort("D");
userBean.setUser("Dippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("E");
userBean.setUser("Eippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("F");
userBean.setUser("Fippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("O");
userBean.setUser("Oippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("I");
userBean.setUser("Iippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("X");
userBean.setUser("Xippo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("X");
userBean.setUser("Xypo");
listUserBeans.add(userBean);
userBean=new UserBean();
userBean.setImageId(R.drawable.default_useravatar);
userBean.setSort("Z");
userBean.setUser("Zippt");
listUserBeans.add(userBean);

//对数据源进行排序
Collections.sort(listUserBeans,new Comparator<UserBean>() {
@Override
public int compare(UserBean lhs, UserBean rhs) {
return lhs.getSort().compareTo(rhs.getSort());
}
});
//实例化一个alphabetIndexer类,用于分组
alphabetIndexer=new AlphabetIndexer(new MyCursor(listUserBeans), 1, alphabet);
//ListView的适配
mAdapter=new MyConnectAdapter(getActivity(), R.layout.item_connect, listUserBeans, alphabetIndexer);
mListView.setAdapter(mAdapter);
//设置侧边A-Z滑动效果
setAlpabetListener();
//设置首字母碰撞覆盖效果
mListView.setOnScrollListener(new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}

@Override
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {
//设置首字母碰撞覆盖效果具体代码
int section = alphabetIndexer.getSectionForPosition(firstVisibleItem);
int nextSecPosition = alphabetIndexer.getPositionForSection(section + 1);
if (firstVisibleItem != lastFirstVisibleItem) {
MarginLayoutParams params = (MarginLayoutParams) titleLayout.getLayoutParams();
params.topMargin = 0;
titleLayout.setLayoutParams(params);
title.setText(String.valueOf(alphabet.charAt(section)));
}
if (nextSecPosition == firstVisibleItem + 1) {
View childView = view.getChildAt(0);
if (childView != null) {
int titleHeight = titleLayout.getHeight();
int bottom = childView.getBottom();
MarginLayoutParams params = (MarginLayoutParams) titleLayout
.getLayoutParams();
if (bottom < titleHeight) {
float pushedDistance = bottom - titleHeight;
params.topMargin = (int) pushedDistance;
titleLayout.setLayoutParams(params);
} else {
if (params.topMargin != 0) {
params.topMargin = 0;
titleLayout.setLayoutParams(params);
}
}
}
}
lastFirstVisibleItem = firstVisibleItem;
}
});
}

private void setAlpabetListener() {
alphabetButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float alphabetHeight = alphabetButton.getHeight();
float y = event.getY();
int sectionPosition = (int) ((y / alphabetHeight) / (1f / 27f));
if (sectionPosition < 0) {
sectionPosition = 0;
} else if (sectionPosition > 26) {
sectionPosition = 26;
}
String sectionLetter = String.valueOf(alphabet.charAt(sectionPosition));
int position = alphabetIndexer.getPositionForSection(sectionPosition);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
alphabetButton.setBackgroundResource(R.drawable.a_z_click);
sectionToastLayout.setVisibility(View.VISIBLE);
sectionToastText.setText(sectionLetter);
mListView.setSelection(position);
break;
case MotionEvent.ACTION_MOVE:
sectionToastText.setText(sectionLetter);
mListView.setSelection(position);
break;
default:
alphabetButton.setBackgroundResource(R.drawable.a_z);
sectionToastLayout.setVisibility(View.GONE);
}
return true;
}

});
}
}
适配代码:
package com.example.custom;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SectionIndexer;
import android.widget.TextView;

import com.example.bean.UserBean;
import com.example.wechat.R;

public class MyConnectAdapter extends ArrayAdapter<UserBean>{

Context context;
int resource;
List<UserBean> objects;
SectionIndexer sectionIndexer;
public MyConnectAdapter(Context context, int resource,List<UserBean> objects,SectionIndexer sectionIndexer) {
super(context, resource, objects);
this.context=context;
this.resource=resource;
this.objects=objects;
this.sectionIndexer=sectionIndexer;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view;
LinearLayout keyLayout;
TextView keyTextView;
ImageView valueImageView;
TextView valueTextView;
if(convertView!=null){
view=convertView;
}else {
view=LayoutInflater.from(context).inflate(R.layout.item_connect, null);
}
keyLayout=(LinearLayout)view.findViewById(R.id.key_layout);
keyTextView=(TextView)view.findViewById(R.id.key);
valueImageView=(ImageView)view.findViewById(R.id.valueImg);
valueTextView=(TextView)view.findViewById(R.id.value);

valueImageView.setImageResource(objects.get(position).getImageId());
valueTextView.setText(objects.get(position).getUser());
//分组,顶部标签显示控制
int secIndex=sectionIndexer.getSectionForPosition(position);
if(position==sectionIndexer.getPositionForSection(secIndex)){
keyLayout.setVisibility(View.VISIBLE);
keyTextView.setText(objects.get(position).getSort());
}else {
keyLayout.setVisibility(View.GONE);
}
return view;
}

}
因为代码中分组实现需要一个游标cursor,因此我们还需要自定义一个cursor,如下:
package com.example.custom;

import java.util.List;

import android.content.ContentResolver;
import android.database.CharArrayBuffer;
import android.database.ContentObserver;
import android.database.Cursor;
import android.database.DataSetObserver;
import android.net.Uri;
import android.os.Bundle;

import com.example.bean.UserBean;

public class MyCursor implements Cursor{

List<UserBean> list;
int position;
public MyCursor(List<UserBean> list){
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public String getString(int columnIndex) {
// TODO Auto-generated method stub
return list.get(position).getSort();
}

@Override
public boolean moveToPosition(int position) {
if(position<-1||position>getCount()){
return false;
}

this.position = position;
return true;
}
@Override
public boolean moveToNext() {
// TODO Auto-generated method stub
return false;
}

@Override
public void close() {

}

@Override
public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
// TODO Auto-generated method stub

}

@Override
@Deprecated
public void deactivate() {
// TODO Auto-generated method stub

}

@Override
public byte[] getBlob(int columnIndex) {
// TODO Auto-generated method stub
return null;
}

@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return 0;
}

@Override
public int getColumnIndex(String columnName) {
// TODO Auto-generated method stub
return 0;
}

@Override
public int getColumnIndexOrThrow(String columnName)
throws IllegalArgumentException {
// TODO Auto-generated method stub
return 0;
}

@Override
public String getColumnName(int columnIndex) {
// TODO Auto-generated method stub
return null;
}

@Override
public String[] getColumnNames() {
// TODO Auto-generated method stub
return null;
}

@Override
public double getDouble(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public Bundle getExtras() {
// TODO Auto-generated method stub
return null;
}

@Override
public float getFloat(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public int getInt(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public long getLong(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public Uri getNotificationUri() {
// TODO Auto-generated method stub
return null;
}

@Override
public int getPosition() {
// TODO Auto-generated method stub
return 0;
}

@Override
public short getShort(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public int getType(int columnIndex) {
// TODO Auto-generated method stub
return 0;
}

@Override
public boolean getWantsAllOnMoveCalls() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isAfterLast() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isBeforeFirst() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isClosed() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isFirst() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isLast() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isNull(int columnIndex) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean move(int offset) {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean moveToFirst() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean moveToLast() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean moveToPrevious() {
// TODO Auto-generated method stub
return false;
}

@Override
public void registerContentObserver(ContentObserver observer) {
// TODO Auto-generated method stub

}

@Override
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub

}

@Override
@Deprecated
public boolean requery() {
// TODO Auto-generated method stub
return false;
}

@Override
public Bundle respond(Bundle extras) {
// TODO Auto-generated method stub
return null;
}

@Override
public void setNotificationUri(ContentResolver cr, Uri uri) {
// TODO Auto-generated method stub

}

@Override
public void unregisterContentObserver(ContentObserver observer) {
// TODO Auto-generated method stub

}

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub

}

}


最后,附上第二频道的配置xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>

<LinearLayout
android:id="@+id/title_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:fadingEdge="none"
android:background="#F0F0F0"
>

<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:textColor="@android:color/black"
/>
</LinearLayout>

<ListView
android:id="@+id/contectListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:fadingEdge="none"
/>
<ImageButton
android:id="@+id/az"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:background="@drawable/a_z"
/>

<RelativeLayout
android:id="@+id/az_toast_layout"
android:layout_width="50dip"
android:layout_height="50dip"
android:layout_centerInParent="true"
android:background="@drawable/section_toast"
android:visibility="gone"
>
<TextView
android:id="@+id/az_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textColor="@android:color/white"
/>
</RelativeLayout>

</RelativeLayout>
自此,第二频道结束。
(3)第三频道

这个频道没有其他操作,主要是做一个ListView的适配器,适配即可。

适配的xml文件:

<?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:orientation="vertical" >

<LinearLayout
android:id="@+id/find_distance"
android:layout_width="match_parent"
android:layout_height="20dp"
android:background="#DBDBDB"
android:orientation="vertical"
android:visibility="gone"
/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#F5FFFA"
android:orientation="horizontal"
>
<ImageView android:id="@+id/find_left_icon"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:padding="10dp"
android:scaleType="fitCenter"
android:src="@drawable/default_useravatar"></ImageView>

<TextView android:id="@+id/find_text"
android:layout_weight="4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginLeft="10dp"
android:text="朋友圈"/>

<ImageView android:id="@+id/find_right_icon"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:scaleType="fitCenter"
android:padding="10dp"
android:src="@drawable/default_useravatar"
android:visibility="gone"></ImageView>"
</LinearLayout>

</LinearLayout>


第三频道代码:
package com.example.wechat;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.bean.FindBean;
import com.example.custom.MyFindAdapter;

public class Fragment3 extends Fragment{

ListView findListView;
ArrayAdapter<FindBean> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_3, container, false);
findListView=(ListView)view.findViewById(R.id.find_listview);
return view;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
List<FindBean> lists=new ArrayList<FindBean>();
FindBean findBean=new FindBean();
findBean.setDistanceShow(true);
findBean.setIsrightImgShow(true);
findBean.setLeftImgId(R.drawable.find_friends);
findBean.setRightImgId(R.drawable.find_right);
findBean.setTitle("朋友圈");
lists.add(findBean);

findBean=new FindBean();
findBean.setDistanceShow(true);
findBean.setIsrightImgShow(false);
findBean.setLeftImgId(R.drawable.find_erweima);
findBean.setTitle("扫一扫");
lists.add(findBean);

findBean=new FindBean();
findBean.setDistanceShow(false);
findBean.setIsrightImgShow(false);
findBean.setLeftImgId(R.drawable.find_yaoyiyao);
findBean.setTitle("摇一摇");
lists.add(findBean);

findBean=new FindBean();
findBean.setDistanceShow(true);
findBean.setIsrightImgShow(false);
findBean.setLeftImgId(R.drawable.find_fujin);
findBean.setTitle("附近的人");
lists.add(findBean);

findBean=new FindBean();
findBean.setDistanceShow(true);
findBean.setIsrightImgShow(false);
findBean.setLeftImgId(R.drawable.find_gouwu);
findBean.setTitle("购物");
lists.add(findBean);

findBean=new FindBean();
findBean.setDistanceShow(false);
findBean.setIsrightImgShow(false);
findBean.setLeftImgId(R.drawable.find_youxi);
findBean.setTitle("游戏");
lists.add(findBean);

adapter=new MyFindAdapter(getActivity(), R.layout.item_find, lists);
findListView.setAdapter(adapter);

}

}
(4)第四频道同上。
至此,分界面设计执行结束。

三、源码

 http://download.csdn.net/detail/yangzhaomuma/9553259
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息