Android 社交娱乐聊天APP
个人对Android的app开发比较感兴趣, 但公司一直没有机会(工作已经N年了,一直都是从事后台服务器的开发),这次利用春节假期,学习了一下Android的开发,
并且打算利用业余时间做了一个类似社交娱乐的APP,目前前正在做界面(),Server端还在设计当中准备开始写,后面会给大家共享来,
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent"
android:gravity="bottom"
android:background="@drawable/start_flash_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/welcome_subject" />
</RelativeLayout>
Class文件:
public class FlashStart extends Activity {
private static final long animationDurationTime = 3000l;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final View view = View.inflate(this, R.layout.flash_start, null);
setContentView(view);
//create animation
AlphaAnimation aa = new AlphaAnimation(0.3f, 1.0f);
aa.setDuration(animationDurationTime);
view.startAnimation(aa);
aa.setAnimationListener(new AnimationListener(){
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
redirectTo();
}
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
});
}
private void redirectTo()
{
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
主界面的部局文件:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/main_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<RadioGroup
android:id="@+id/funny_tab_menu"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
android:background="@drawable/funny_buttom_bar"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/funny_first_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:checked="true"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="2dp"
android:paddingLeft="2dip"
android:text="首页"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_chatting_room"
android:layout_width="67dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginLeft="0dip"
android:layout_marginRight="0dip"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingLeft="0dip"
android:paddingTop="5dp"
android:text="聊天室"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_address_book"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingLeft="0dip"
android:paddingTop="5dp"
android:text="通讯录"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="5dp"
android:paddingLeft="0dip"
android:text="发现"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_personal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="5dp"
android:paddingLeft="0dip"
android:text="个人"
android:textColor="@drawable/tab_selector_tv_color" />
</RadioGroup>
</RelativeLayout>
MainActivity的类文件:
public class MainActivity extends FragmentActivity implements OnClickListener {
/* private Button btnAddressBook; */
private RadioGroup radioGroupFunny;
private Fragment fragmentMainPanel;
private Fragment fragmentAddressBook;
private Fragment fragmentChattingList;
FragmentManager fragmentManager;
private FragmentTransaction transaction;
private static String FRAGMENTTAG_MAIN_PANEL="fragmenttag_main_panel";
private static String FRAGMENTTAG_ADDRESS_BOOK="fragmenttag_address_book";
private static String FRAGMENTTAG_CHATING_LIST="fragmenttag_chating_list";
@Override
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
fragmentMainPanel = (MainPanel) fragmentManager
.findFragmentByTag("allFrg");
fragmentAddressBook = (AddressBookFragment) fragmentManager
.findFragmentByTag("movieFrg");
fragmentChattingList = (ChattingListFragment) fragmentManager
.findFragmentByTag("newsFrg");
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
initiateView();
}
private void initiateView() {
/* btnAddressBook.setOnClickListener(this); */
/*
* fragmentAddressBook = new AddressBookFragment(); fragmentChattingList
* = new ChattingListFragment();
*/
try {
fragmentAddressBook = (AddressBookFragment) ObjectsUtilities
.createObject(AddressBookFragment.class,
fragmentAddressBook);
fragmentChattingList = (ChattingListFragment) ObjectsUtilities
.createObject(ChattingListFragment.class,
fragmentChattingList);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
transaction = fragmentManager.beginTransaction();
fragmentMainPanel = new MainPanel();
transaction.add(R.id.main_content, fragmentMainPanel,FRAGMENTTAG_MAIN_PANEL);
transaction.show(fragmentMainPanel).commit();
radioGroupFunny = (RadioGroup) findViewById(R.id.funny_tab_menu);
radioGroupFunny
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
transaction = getSupportFragmentManager()
.beginTransaction();
switch (checkedId) {
case R.id.funny_first_page:
hideFragments();
transaction.show(fragmentMainPanel);
/**
* 用replace()方法来替换Fragment。
* 每次切换的时候Fragment都会重新实列化,重新加载一次数据,
* 这样做会非常消耗性能用用户的流量。
*/
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentMainPanel).commit();
*/
break;
case R.id.funny_chatting_room:
hideFragments();
if (!fragmentChattingList.isAdded()) {
transaction.add(R.id.main_content,
fragmentChattingList,FRAGMENTTAG_CHATING_LIST);
}
transaction.show(fragmentChattingList);
break;
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentChattingList).commit();
*/
case R.id.funny_address_book:
hideFragments();
if (!fragmentAddressBook.isAdded()) {
transaction.add(R.id.main_content,
fragmentAddressBook,FRAGMENTTAG_ADDRESS_BOOK);
}
transaction.show(fragmentAddressBook);
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentAddressBook).commit();
*/
break;
case R.id.funny_find:
break;
case R.id.funny_personal:
break;
default:
break;
}
transaction.commit();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onClick(View v) {
// TODO Auto-generated method stub
}
private void hideFragments() {
if (fragmentMainPanel != null) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentMainPanel).commit();
}
if (fragmentAddressBook != null) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentAddressBook).commit();
}
if (null != fragmentChattingList) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentChattingList).commit();
}
}
}
通信录页面:
页面部局文件(address_book.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/address_book_head_layout"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:background="@drawable/title_bar"
android:gravity="center_vertical" >
<TextView
android:id="@+id/address_book_title"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dip"
android:text="通信录"
android:textColor="#fff"
android:textSize="14sp" />
<ImageButton
android:id="@+id/search_btn"
android:layout_width="67dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:alpha="255"
android:background="@drawable/address_book_search_bg" />
</RelativeLayout>
<ListView
android:id="@+id/address_book_listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/address_book_head_layout"
android:cacheColorHint="#0000"
android:divider="@color/black"
android:dividerHeight="1dp"
android:scrollbarStyle="outsideOverlay" />
</RelativeLayout>
address_book_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView android:id="@+id/family_icon"
android:layout_width="64dp"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:paddingTop="8dip"
android:layout_height="64dp"/>
<TextView
android:id="@+id/family_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left" />
</LinearLayout>
做的过程中遇到的最大问题是:
1.在fragment切换时会出现两个页面重叠现象,后面从FragmentManager 的replace方法改为.show方法解决.
code:
transaction.show(fragmentMainPanel);
/**
* 用replace()方法来替换Fragment。
* 每次切换的时候Fragment都会重新实列化,重新加载一次数据,
* 这样做会非常消耗性能用用户的流量。
*/
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentMainPanel).commit();
*/
聊天记录:
个人对Android的app开发比较感兴趣, 但公司一直没有机会(工作已经N年了,一直都是从事后台服务器的开发),这次利用春节假期,学习了一下Android的开发,
并且打算利用业余时间做了一个类似社交娱乐的APP,目前前正在做界面(),Server端还在设计当中准备开始写,后面会给大家共享来,
不多说了,来看部局和代码,因为代码和部局比较多,就不一一列出来了,有兴趣的同学可以联系。
或从http://download.csdn.net/detail/vernal_man01/9433544下载。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:orientation="vertical"
android:layout_height="fill_parent"
android:gravity="bottom"
android:background="@drawable/start_flash_background">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="@string/welcome_subject" />
</RelativeLayout>
Class文件:
public class FlashStart extends Activity {
private static final long animationDurationTime = 3000l;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
final View view = View.inflate(this, R.layout.flash_start, null);
setContentView(view);
//create animation
AlphaAnimation aa = new AlphaAnimation(0.3f, 1.0f);
aa.setDuration(animationDurationTime);
view.startAnimation(aa);
aa.setAnimationListener(new AnimationListener(){
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
redirectTo();
}
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
});
}
private void redirectTo()
{
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
主界面的部局文件:
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/main_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<RadioGroup
android:id="@+id/funny_tab_menu"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:layout_alignParentBottom="true"
android:background="@drawable/funny_buttom_bar"
android:orientation="horizontal" >
<RadioButton
android:id="@+id/funny_first_page"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:checked="true"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="2dp"
android:paddingLeft="2dip"
android:text="首页"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_chatting_room"
android:layout_width="67dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:layout_marginLeft="0dip"
android:layout_marginRight="0dip"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingLeft="0dip"
android:paddingTop="5dp"
android:text="聊天室"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_address_book"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingLeft="0dip"
android:paddingTop="5dp"
android:text="通讯录"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_find"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="5dp"
android:paddingLeft="0dip"
android:text="发现"
android:textColor="@drawable/tab_selector_tv_color" />
<RadioButton
android:id="@+id/funny_personal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="center_horizontal|center_vertical"
android:button="@null"
android:gravity="center_horizontal|center_vertical"
android:paddingTop="5dp"
android:paddingLeft="0dip"
android:text="个人"
android:textColor="@drawable/tab_selector_tv_color" />
</RadioGroup>
</RelativeLayout>
MainActivity的类文件:
public class MainActivity extends FragmentActivity implements OnClickListener {
/* private Button btnAddressBook; */
private RadioGroup radioGroupFunny;
private Fragment fragmentMainPanel;
private Fragment fragmentAddressBook;
private Fragment fragmentChattingList;
FragmentManager fragmentManager;
private FragmentTransaction transaction;
private static String FRAGMENTTAG_MAIN_PANEL="fragmenttag_main_panel";
private static String FRAGMENTTAG_ADDRESS_BOOK="fragmenttag_address_book";
private static String FRAGMENTTAG_CHATING_LIST="fragmenttag_chating_list";
@Override
public void onCreate(Bundle savedInstanceState) {
if (savedInstanceState != null) {
fragmentMainPanel = (MainPanel) fragmentManager
.findFragmentByTag("allFrg");
fragmentAddressBook = (AddressBookFragment) fragmentManager
.findFragmentByTag("movieFrg");
fragmentChattingList = (ChattingListFragment) fragmentManager
.findFragmentByTag("newsFrg");
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
initiateView();
}
private void initiateView() {
/* btnAddressBook.setOnClickListener(this); */
/*
* fragmentAddressBook = new AddressBookFragment(); fragmentChattingList
* = new ChattingListFragment();
*/
try {
fragmentAddressBook = (AddressBookFragment) ObjectsUtilities
.createObject(AddressBookFragment.class,
fragmentAddressBook);
fragmentChattingList = (ChattingListFragment) ObjectsUtilities
.createObject(ChattingListFragment.class,
fragmentChattingList);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
transaction = fragmentManager.beginTransaction();
fragmentMainPanel = new MainPanel();
transaction.add(R.id.main_content, fragmentMainPanel,FRAGMENTTAG_MAIN_PANEL);
transaction.show(fragmentMainPanel).commit();
radioGroupFunny = (RadioGroup) findViewById(R.id.funny_tab_menu);
radioGroupFunny
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
transaction = getSupportFragmentManager()
.beginTransaction();
switch (checkedId) {
case R.id.funny_first_page:
hideFragments();
transaction.show(fragmentMainPanel);
/**
* 用replace()方法来替换Fragment。
* 每次切换的时候Fragment都会重新实列化,重新加载一次数据,
* 这样做会非常消耗性能用用户的流量。
*/
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentMainPanel).commit();
*/
break;
case R.id.funny_chatting_room:
hideFragments();
if (!fragmentChattingList.isAdded()) {
transaction.add(R.id.main_content,
fragmentChattingList,FRAGMENTTAG_CHATING_LIST);
}
transaction.show(fragmentChattingList);
break;
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentChattingList).commit();
*/
case R.id.funny_address_book:
hideFragments();
if (!fragmentAddressBook.isAdded()) {
transaction.add(R.id.main_content,
fragmentAddressBook,FRAGMENTTAG_ADDRESS_BOOK);
}
transaction.show(fragmentAddressBook);
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentAddressBook).commit();
*/
break;
case R.id.funny_find:
break;
case R.id.funny_personal:
break;
default:
break;
}
transaction.commit();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onClick(View v) {
// TODO Auto-generated method stub
}
private void hideFragments() {
if (fragmentMainPanel != null) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentMainPanel).commit();
}
if (fragmentAddressBook != null) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentAddressBook).commit();
}
if (null != fragmentChattingList) {
getSupportFragmentManager().beginTransaction()
.hide(fragmentChattingList).commit();
}
}
}
通信录页面:
页面部局文件(address_book.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<RelativeLayout
android:id="@+id/address_book_head_layout"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:background="@drawable/title_bar"
android:gravity="center_vertical" >
<TextView
android:id="@+id/address_book_title"
android:layout_width="70dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dip"
android:text="通信录"
android:textColor="#fff"
android:textSize="14sp" />
<ImageButton
android:id="@+id/search_btn"
android:layout_width="67dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:alpha="255"
android:background="@drawable/address_book_search_bg" />
</RelativeLayout>
<ListView
android:id="@+id/address_book_listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/address_book_head_layout"
android:cacheColorHint="#0000"
android:divider="@color/black"
android:dividerHeight="1dp"
android:scrollbarStyle="outsideOverlay" />
</RelativeLayout>
address_book_item.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView android:id="@+id/family_icon"
android:layout_width="64dp"
android:paddingLeft="8dip"
android:paddingRight="8dip"
android:paddingTop="8dip"
android:layout_height="64dp"/>
<TextView
android:id="@+id/family_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|left" />
</LinearLayout>
做的过程中遇到的最大问题是:
1.在fragment切换时会出现两个页面重叠现象,后面从FragmentManager 的replace方法改为.show方法解决.
code:
transaction.show(fragmentMainPanel);
/**
* 用replace()方法来替换Fragment。
* 每次切换的时候Fragment都会重新实列化,重新加载一次数据,
* 这样做会非常消耗性能用用户的流量。
*/
/*
* getSupportFragmentManager() .beginTransaction()
* .replace(R.id.main_content,
* fragmentMainPanel).commit();
*/
主界面
聊天记录:
.
通信录: