package com.partynetwork.iparty.personal; import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Handler.Callback; import android.os.Message; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.Gravity; import android.view.View; import android.view.Window; import android.view.View.OnClickListener; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.view.annotation.ViewInject; import com.lidroid.xutils.view.annotation.event.OnClick; import com.partynetwork.dataprovider.DataProvider.IJsonResultListener; import com.partynetwork.dataprovider.json.NetworkEntity; import com.partynetwork.dataprovider.json.struct.Contacts_deleteAttentionRequest; import com.partynetwork.dataprovider.json.struct.Contacts_setAttentionRequest; import com.partynetwork.dataprovider.json.struct.Personal_getUserInfoRequest; import com.partynetwork.dataprovider.json.struct.Personal_getUserInfoResponse; import com.partynetwork.dataprovider.util.ActionUtil; import com.partynetwork.dataprovider.util.T; import com.partynetwork.dataprovider.util.Util; import com.partynetwork.iparty.R; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.app.AppException; import com.partynetwork.iparty.app.common.BitmapManager; import com.partynetwork.iparty.app.widget.MessagePop; import com.partynetwork.iparty.app.widget.MyScrollView; import com.partynetwork.iparty.app.widget.MessagePop.sendMessageListener; import com.partynetwork.iparty.app.widget.MyScrollView.OnScrollListener; import com.partynetwork.iparty.info.UserInfo; import com.partynetwork.iparty.ishare.IshareReportActivity; import com.partynetwork.myview.myimageview.CircularImage; import com.partynetwork.myview.mytoast.MenuBottomPop; public class PersonalActivity extends FragmentActivity implements IJsonResultListener, OnScrollListener, OnClickListener, Callback { public static final String USER_ID = "user_id"; private static final int TAB_INFO = 0; private static final int TAB_PARTY = 1; private static final int TAB_SHARE = 2; private static final int TAB_ABLUM = 3; // 返回按钮 @ViewInject(R.id.back_iv) private ImageView back; // 设置按钮 @ViewInject(R.id.site_iv) private ImageView site; @ViewInject(R.id.scroll_view) private MyScrollView scrollView; @ViewInject(R.id.frame_layout) private FrameLayout frameLayout; /** * 用户背景 */ @ViewInject(R.id.personal_bg_iv) private ImageView personalBg; @ViewInject(R.id.info_menu) private LinearLayout infoMenu; @ViewInject(R.id.info_top_menu) private LinearLayout infoTopMenu; /** * 信息 */ @ViewInject(R.id.info_rl) private RelativeLayout infoLayout; @ViewInject(R.id.info_tv) private TextView infoTv; @ViewInject(R.id.info_ll) private LinearLayout infoLL; /** * party列表 */ @ViewInject(R.id.party_rl) private RelativeLayout partyLayout; @ViewInject(R.id.party_tv) private TextView partyTv; @ViewInject(R.id.party_ll) private LinearLayout partyLL; /** * share列表 */ @ViewInject(R.id.share_rl) private RelativeLayout shareLayout; @ViewInject(R.id.share_tv) private TextView shareTv; @ViewInject(R.id.share_ll) private LinearLayout shareLL; /** * 相册列表 */ @ViewInject(R.id.ablum_rl) private RelativeLayout ablumLayout; @ViewInject(R.id.ablum_tv) private TextView ablumTv; @ViewInject(R.id.ablum_ll) private LinearLayout ablumLL; /** * 头像 */ @ViewInject(R.id.head_iv_other) private CircularImage headOther; @ViewInject(R.id.head_iv_me) private CircularImage headMe; /** * 姓名 */ @ViewInject(R.id.name_tv_other) private TextView nameOther; @ViewInject(R.id.name_tv_me) private TextView nameMe; /** * 状态 */ @ViewInject(R.id.state_tv_other) private TextView stateOther; @ViewInject(R.id.state_tv_me) private TextView stateMe; /** * 其他用户显示的布局 */ @ViewInject(R.id.info_other_rl) private RelativeLayout otherRL; @ViewInject(R.id.info_me_ll) private LinearLayout meLL; // 用户关系状态 @ViewInject(R.id.relation_iv) private ImageView ralation; // 打招呼 private ImageButton sayHi; // 用于用户基本信息的Fragment private PersonalInfoFragment personalInfoFragment; // 用于用户party信息的Fragment private PartyFragment partyFragment; // 用于用户i分享信息的Fragment private ShareFragment shareFragment; /** 用于对Fragment进行管理 */ private FragmentManager fragmentManager; /** 用户Id */ private int userId; /** 登陆用户和当前查询用户的关系:用户类别 -1:未知状态;0:陌生人用户;1:i好友;2:我关注的人;3:我的粉丝;4:我的去你妹用户;5:我自己 */ private int userType; /** 当前好友的基本信息 */ private UserInfo info; /** * 底部的弹窗 */ private MenuBottomPop menuBottonPop; private String moreArray[] = new String[] { "举报不良信息" }; private AppContext context; private BitmapManager bitmapManager; private MessagePop messageDilog; private Handler mHandler; /** * 覆盖方法 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setTheme(R.style.DefaultLightTheme); setContentView(R.layout.personal_center); context = (AppContext) this.getApplication(); ViewUtils.inject(this); initView(); init(); } private void initView() { mHandler = new Handler(this); sayHi = (ImageButton) findViewById(R.id.say_hi); sayHi.setOnClickListener(this); messageDilog = new MessagePop(PersonalActivity.this); messageDilog.setMessageListener(new sendMessageListener() { @Override public void sendMessage(final String message) { new Thread() { @Override public void run() { Message msg = new Message(); try { int result = context.setGreet(userId, message); // 保存信息 // ... // 待完成 msg.what = 1;// 成功 msg.obj = result; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } mHandler.sendMessage(msg); } }.start(); } }); } /** * 初始化 */ private void init() { scrollView.setOnScrollListener(this); findViewById(R.id.parent_layout).getViewTreeObserver() .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // 这一步很重要,使得上面的购买布局和下面的购买布局重合 onScroll(scrollView.getScrollY()); } }); bitmapManager = new BitmapManager(); menuBottonPop = new MenuBottomPop(this, moreArray, clickListener); userId = getIntent().getIntExtra(USER_ID, context.getLoginUid()); if (userId == context.getLoginUid()) { meLL.setVisibility(View.VISIBLE); otherRL.setVisibility(View.GONE); site.setVisibility(View.VISIBLE); back.setImageResource(R.drawable.personal_back); sayHi.setVisibility(View.GONE); } else { otherRL.setVisibility(View.VISIBLE); meLL.setVisibility(View.GONE); site.setVisibility(View.VISIBLE); back.setImageResource(R.drawable.personal_other_back); sayHi.setVisibility(View.VISIBLE); } // 发起获得指定用户数据请求 Personal_getUserInfoRequest request = new Personal_getUserInfoRequest(); request.setFromUserId(context.getLoginUid()); request.setUserId(userId); AppContext.getInstance().getmDataProvider() .getJsonFromNetwork(request, this); fragmentManager = getSupportFragmentManager(); // 第一次启动时选中第0个tab setTabSelection(TAB_INFO); } /** * 初始化数据 */ private void initData() { if (info == null) { return; } // 设置用户关系 userType = info.getUserType(); switch (userType) { case ActionUtil.user.RELATIONSHIP_NUKNOW: // 未知用户 case ActionUtil.user.RELATIONSHIP_STRANGER: // 关注操作 case ActionUtil.user.RELATIONSHIP_FANS: // 关注操作 ralation.setImageResource(R.drawable.relation_default); break; case ActionUtil.user.RELATIONSHIP_FRIEND: // 好友 ralation.setImageResource(R.drawable.relation_friend_default); break; case ActionUtil.user.RELATIONSHIP_ATTENTION: // 取消关注操作 ralation.setImageResource(R.drawable.relation_attentioned); break; case ActionUtil.user.RELATIONSHIP_BLACKLIST: ralation.setImageResource(R.drawable.relation_blacklist_default); // 取消去你妹操作 break; case ActionUtil.user.RELATIONSHIP_MYSELF: // 我自己 break; default: ralation.setImageResource(R.drawable.relation_default); break; } // 用户个人中心背景 String bgUrl = info.getUserHeadBgUrl(); if (bgUrl != null && !bgUrl.equals("")) { bitmapManager.loadBitmap(bgUrl, personalBg); } // 用户头像 String headUrl = info.getUserHeadUrl(); if (headUrl != null && !headUrl.equals("")) { if (userId == context.getLoginUid()) { bitmapManager.loadBitmap(headUrl, headMe); } else { bitmapManager.loadBitmap(headUrl, headOther); } } // 姓名,性别 nameOther.setText(info.getUserName()); nameMe.setText(info.getUserName()); messageDilog.setTitle(info.getUserName()); Drawable right = null; if (info.getUserSex() == ActionUtil.user.MALE) { right = getResources().getDrawable(R.drawable.sex_boy_big_pressed); } else if (info.getUserSex() == ActionUtil.user.FEMALE) { right = getResources().getDrawable(R.drawable.sex_girl_big_pressed); } else { right = getResources().getDrawable( R.drawable.sex_neutral_big_pressed); } right.setBounds(0, 0, right.getMinimumWidth(), right.getMinimumHeight()); nameOther.setCompoundDrawables(null, null, right, null); nameMe.setCompoundDrawables(null, null, right, null); // 状态 stateOther.setText(info.getUserState() + " " + info.getUserAge() + " " + info.getUserCity()); stateMe.setText(info.getUserState() + " " + info.getUserAge() + " " + info.getUserCity()); if (personalInfoFragment != null) { personalInfoFragment.setInfo(info); } } /** * 事件监听 */ @OnClick({ R.id.back_iv, R.id.site_iv, R.id.info_rl, R.id.party_rl, R.id.share_rl, R.id.ablum_rl, R.id.relation_iv }) public void setOnclick(View view) { switch (view.getId()) { case R.id.back_iv: // 返回 finish(); break; case R.id.site_iv: // 设置 menuBottonPop.showAtLocation(personalBg); break; case R.id.info_rl: // 当点击了信息tab时,选中第1个tab setTabSelection(TAB_INFO); break; case R.id.party_rl: setTabSelection(TAB_PARTY); break; case R.id.share_rl: setTabSelection(TAB_SHARE); break; case R.id.ablum_rl: setTabSelection(TAB_ABLUM); break; case R.id.relation_iv: // 用户关系状态 sendOperating(); break; default: setTabSelection(TAB_INFO); break; } } /** * 底部弹窗的监听 */ private OnClickListener clickListener = new OnClickListener() { public void onClick(View v) { if (v.getTag().equals(moreArray[0])) { Intent intent = new Intent(PersonalActivity.this, IshareReportActivity.class); intent.putExtra(IshareReportActivity.CONTENT_ID, info.getUserId()); intent.putExtra(IshareReportActivity.REPORT_EVENT_TYPE, 0); PersonalActivity.this.startActivity(intent); } menuBottonPop.dismiss(); } }; /** * 发送用户操作 */ private void sendOperating() { userType = info.getUserType(); switch (userType) { case ActionUtil.user.RELATIONSHIP_NUKNOW: // 未知用户 break; case ActionUtil.user.RELATIONSHIP_STRANGER: // 关注操作 case ActionUtil.user.RELATIONSHIP_FANS: // 关注操作 Contacts_setAttentionRequest attentionRequest = new Contacts_setAttentionRequest(); attentionRequest.setFromUserId(context.getLoginUid()); attentionRequest.setToUserId(new int[] { userId }); context.getmDataProvider().getJsonFromNetwork(attentionRequest, this); break; case ActionUtil.user.RELATIONSHIP_FRIEND: // 进行下拉分组操作 case ActionUtil.user.RELATIONSHIP_ATTENTION: // 取消关注操作 Contacts_deleteAttentionRequest daRequest = new Contacts_deleteAttentionRequest(); daRequest.setFromUserId(context.getLoginUid()); daRequest.setToUserId(new int[] { userId }); context.getmDataProvider().getJsonFromNetwork(daRequest, this); break; case ActionUtil.user.RELATIONSHIP_BLACKLIST: // 取消去你妹操作 break; case ActionUtil.user.RELATIONSHIP_MYSELF: // 我自己 break; default: break; } } /** * 根据传入的index参数来设置选中的tab页。 * * @param index * 每个tab页对应的下标。0表示信息,1表示party,2表示分享,3表示相册。 */ private void setTabSelection(int index) { // 每次选中之前先清楚掉上次的选中状态 clearSelection(); // 开启一个Fragment事务 FragmentTransaction transaction = fragmentManager.beginTransaction(); // 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况 hideFragments(transaction); switch (index) { case TAB_INFO: // 当点击了消息tab时,改变控件的图片和文字颜色 infoTv.setTextColor(Color.BLACK); infoLL.setVisibility(View.VISIBLE); if (personalInfoFragment == null) { // 如果PersonalInfoFragment为空,则创建一个并添加到界面上 personalInfoFragment = new PersonalInfoFragment(); transaction.add(R.id.content, personalInfoFragment); // personalInfoFragment.sendRequest(userId); } else { // 如果PersonalInfoFragment不为空,则直接将它显示出来 transaction.show(personalInfoFragment); } break; case TAB_PARTY: // 当点击了消息tab时,改变控件的图片和文字颜色 partyTv.setTextColor(Color.BLACK); partyLL.setVisibility(View.VISIBLE); if (partyFragment == null) { partyFragment = new PartyFragment(); partyFragment.setUserId(userId); transaction.add(R.id.content, partyFragment); } else { transaction.show(partyFragment); } break; case TAB_SHARE: // 当点击了消息tab时,改变控件的图片和文字颜色 shareTv.setTextColor(Color.BLACK); shareLL.setVisibility(View.VISIBLE); if (shareFragment == null) { shareFragment = new ShareFragment(); shareFragment.setUserId(userId); transaction.add(R.id.content, shareFragment); } else { transaction.show(shareFragment); } break; //缺少相册功能 cgy 2014.6.18 case TAB_ABLUM: // 当点击了消息tab时,改变控件的图片和文字颜色 ablumTv.setTextColor(Color.BLACK); ablumLL.setVisibility(View.VISIBLE); break; default: // 当点击了消息tab时,改变控件的图片和文字颜色 infoTv.setTextColor(Color.BLACK); infoLL.setVisibility(View.VISIBLE); if (personalInfoFragment == null) { // 如果PersonalInfoFragment为空,则创建一个并添加到界面上 personalInfoFragment = new PersonalInfoFragment(); transaction.add(R.id.content, personalInfoFragment); } else { // 如果PersonalInfoFragment不为空,则直接将它显示出来 transaction.show(personalInfoFragment); } break; } transaction.commit(); } /** * 将所有的Fragment都置为隐藏状态。 * * @param transaction * 用于对Fragment执行操作的事务 */ private void hideFragments(FragmentTransaction transaction) { if (personalInfoFragment != null) { transaction.hide(personalInfoFragment); } if (partyFragment != null) { transaction.hide(partyFragment); } if (shareFragment != null) { transaction.hide(shareFragment); } } /** * 清除掉所有的选中状态。 */ private void clearSelection() { infoTv.setTextColor(Color.GRAY); partyTv.setTextColor(Color.GRAY); shareTv.setTextColor(Color.GRAY); ablumTv.setTextColor(Color.GRAY); infoLL.setVisibility(View.GONE); shareLL.setVisibility(View.GONE); partyLL.setVisibility(View.GONE); ablumLL.setVisibility(View.GONE); } public void onNetworkRequest() { // TODO 自动生成的方法存根 } public void onResultSuccess(NetworkEntity entity) { if (entity.getRequest().getAction() .equals(new Personal_getUserInfoRequest().getAction())) { Personal_getUserInfoResponse infoResponse = (Personal_getUserInfoResponse) entity .getResponse(); info = infoResponse.getDetails(); initData(); } if (entity.getRequest().getAction() .equals(new Contacts_setAttentionRequest().getAction())) { T.showTips(this, R.drawable.tips_smile, "关注成功!"); userType = info.getUserType(); switch (userType) { case ActionUtil.user.RELATIONSHIP_NUKNOW: // 未知用户 case ActionUtil.user.RELATIONSHIP_STRANGER: // 关注操作 info.setUserType(ActionUtil.user.RELATIONSHIP_ATTENTION); ralation.setImageResource(R.drawable.relation_attentioned); break; case ActionUtil.user.RELATIONSHIP_FANS: // 关注操作 info.setUserType(ActionUtil.user.RELATIONSHIP_FRIEND); ralation.setImageResource(R.drawable.relation_friend_default); break; default: ralation.setImageResource(R.drawable.relation_attentioned); break; } } if (entity.getRequest().getAction() .equals(new Contacts_deleteAttentionRequest().getAction())) { T.showTips(this, R.drawable.tips_smile, "取消关注成功!"); userType = info.getUserType(); switch (userType) { case ActionUtil.user.RELATIONSHIP_FRIEND: // 好友 info.setUserType(ActionUtil.user.RELATIONSHIP_FANS); ralation.setImageResource(R.drawable.relation_default); break; case ActionUtil.user.RELATIONSHIP_ATTENTION: // 取消关注操作 info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER); ralation.setImageResource(R.drawable.relation_default); break; case ActionUtil.user.RELATIONSHIP_BLACKLIST: info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER); ralation.setImageResource(R.drawable.relation_default); // 取消去你妹操作 break; default: info.setUserType(ActionUtil.user.RELATIONSHIP_STRANGER); ralation.setImageResource(R.drawable.relation_default); break; } } } public void onResultFail(String result) { Util.showMsg(this, result); } @Override public void onScroll(int scrollY) { // 计算顶部菜单的透明度,实现渐变效果 int btop = infoMenu.getTop(); int height = infoMenu.getHeight(); int dif = scrollY - btop + height; dif = dif < 0 ? 0 : dif > height ? height : dif; int alpha = (int) ((height - dif) / (float) height * 255); back.setAlpha(alpha); site.setAlpha(alpha); int mBuyLayout2ParentTop = Math.max(scrollY, infoMenu.getTop()); infoTopMenu.layout(0, mBuyLayout2ParentTop, infoTopMenu.getWidth(), mBuyLayout2ParentTop + infoTopMenu.getHeight()); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.say_hi: // 打招呼 messageDilog.showAtLocation(sayHi, Gravity.CENTER, 0, 0); break; default: break; } } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case 1: T.showTips(this, R.drawable.tips_smile, "您的消息已成功发送!"); break; case -1: AppException e = (AppException) msg.obj; if (AppContext.getInstance().isLogin()) { e.makeToast(this); } break; default: break; } return false; } }