package com.yidianling.dynamic.topic.topicDetail; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import com.alibaba.android.arouter.facade.annotation.Route; import com.umeng.socialize.bean.SHARE_MEDIA; import com.ydl.webview.H5Params; import com.ydl.webview.NewH5Activity; import com.ydl.ydl_image.module.GlideApp; import com.ydl.ydlcommon.actions.share.ShareUtils; import com.ydl.ydlcommon.base.BaseMvpActivity; import com.ydl.ydlcommon.ui.LogoLoadingView; import com.ydl.ydlcommon.utils.BuryPointUtils; import com.ydl.ydlcommon.utils.StatusBarUtils; import com.yidianling.common.tools.LogUtil; import com.yidianling.dynamic.DynamicConstants; import com.yidianling.dynamic.R; import com.yidianling.dynamic.R2; import com.yidianling.dynamic.adapter.TopicDetailMemberAdapter; import com.yidianling.dynamic.model.Focus; import com.yidianling.dynamic.model.TopicDetailBean; import com.yidianling.dynamic.publishTrend.PublishTrendActivity; import com.yidianling.dynamic.router.DynamicIn; import com.yidianling.dynamic.trendList.TrendListInFragment; import com.yidianling.dynamic.trendList.adapter.RecommendTopAdapter; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; /** * 话题详情页 * Refactor by Jim on 2017/12/27 0027. */ @Route(path = "/topic/detail") public class TopicDetailActivity extends BaseMvpActivity<TopicDetailView, TopicDetailPresenterImpl> implements SwipeRefreshLayout.OnRefreshListener, TopicDetailView { @BindView(R2.id.topic_detail_top_bg_iv) ImageView mTopicDetailTopBgIv; @BindView(R2.id.topic_detail_title_tv) TextView mTopicDetailTitleTv; @BindView(R2.id.topic_detail_survey_tv) TextView mTopicDetailSurveyTv; @BindView(R2.id.topic_detail_visit_num_tv) TextView mTopicDetailVisitNumTv; @BindView(R2.id.topic_detail_visit_zj_tv) TextView mTopicDetailVisitZjTv; @BindView(R2.id.topic_detail_trend_num_tv) TextView mTopicDetailTrendNumTv; @BindView(R2.id.topic_detail_focus_tv) TextView mTopicDetailFocusTv; @BindView(R2.id.topic_detail_users_num_tv) TextView mTopicDetailUsersNumTv; @BindView(R2.id.topic_detail_users_rcv) RecyclerView mTopicDetailUsersRcv; @BindView(R2.id.topic_detail_users_rel) RelativeLayout mTopicDetailUsersRel; @BindView(R2.id.topic_detail_top_rel) RelativeLayout mTopicDetailTopRel; @BindView(R2.id.item_topic_detail_new_tv) TextView mItemTopicDetailNewTv; @BindView(R2.id.item_topic_detail_new_hint_tv) View mItemTopicDetailNewHintTv; @BindView(R2.id.item_topic_detail_new_rel) RelativeLayout mItemTopicDetailNewRel; @BindView(R2.id.item_topic_detail_hot_tv) TextView mItemTopicDetailHotTv; @BindView(R2.id.item_topic_detail_hot_hint_tv) View mItemTopicDetailHotHintTv; @BindView(R2.id.item_topic_detail_hot_rel) RelativeLayout mItemTopicDetailHotRel; @BindView(R2.id.topic_detail_type_lin) LinearLayout mTopicDetailTypeLin; @BindView(R2.id.app_bar) AppBarLayout mAppBar; @BindView(R2.id.topic_detail_vp) ViewPager mTopicDetailVp; @BindView(R2.id.swl) SwipeRefreshLayout mSwl; @BindView(R2.id.toolbar) Toolbar mToolbar; @BindView(R2.id.collapsingToolbarLayout) CollapsingToolbarLayout collapsingToolbarLayout; @BindView(R2.id.mine_next_iv) ImageView mMineNextIv; @BindView(R2.id.topic_detail_title_back_iv) ImageView mTopicDetailTitleBackIv; @BindView(R2.id.topic_detail_title_top_right_tv) ImageView mTopicDetailTitleTopRightTv; @BindView(R2.id.publish_trend_btn) FloatingActionButton mPublishTrendBtn; @BindView(R2.id.top_trends_rcv) RecyclerView topTrendsRcv; @BindView(R2.id.divide_line) View divideLine; @BindView(R2.id.v_loading) LogoLoadingView vLoading; private TopicDetailMemberAdapter adapter; private Fragment[] mFragments; String topicId, topicTitle; boolean isSplash; private int totalMembers; private int backgroundColor; private int selectTab; private RecommendTopAdapter mRecommendTopAdapter; private static final String IS_SPLASH = "isSplash"; private static final String TOPIC_ID = "topic_id"; public static Intent newIntent(Context context, boolean isSplash, String topicId) { Intent intent = new Intent(context, TopicDetailActivity.class); intent.putExtra(IS_SPLASH, isSplash); intent.putExtra(TOPIC_ID, topicId); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dynamic_activity_topic_detail); ButterKnife.bind(this); initDatas(); initViews(); fetchDatas(); initNetLossView(); StatusBarUtils.Companion.setCustomStatusView(this,mToolbar,true); } private void initNetLossView() { vLoading.setListener(new LogoLoadingView.LogoLoadingListener() { @Override public void onDataResetClick() { vLoading.setVisibility(View.VISIBLE); vLoading.setViewType(LogoLoadingView.TYPE_LOADING, null); initDatas(); initViews(); fetchDatas(); } @Override public void onBackClick() { finish(); } }); } private void initViews() { setSupportActionBar(mToolbar); mSwl.setOnRefreshListener(this); mSwl.setColorSchemeResources(R.color.dynamic_main_theme); mSwl.setProgressViewOffset(false, 0, 200); topTrendsRcv.setLayoutManager(new LinearLayoutManager(this)); topTrendsRcv.setAdapter(mRecommendTopAdapter); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); mTopicDetailUsersRcv.setLayoutManager(linearLayoutManager); mTopicDetailUsersRcv.setAdapter(adapter); mTopicDetailVp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return mFragments[position]; } @Override public int getCount() { return mFragments.length; } }); mTopicDetailVp.setOffscreenPageLimit(2); mTopicDetailVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: setTabSelection(0); break; case 1: setTabSelection(1); break; } } @Override public void onPageScrollStateChanged(int state) { } }); mAppBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { mSwl.setEnabled(true); } else { mSwl.setEnabled(false); } LogUtil.d("tool bar size: " + mToolbar.getHeight()); if (verticalOffset <= (-appBarLayout.getTotalScrollRange() + mToolbar.getHeight() / 2)) { if (backgroundColor != R.color.dynamic_white) { mToolbar.setBackgroundColor(getResources().getColor(R.color.dynamic_white)); alPhaAnimation(mToolbar, 0, 1, null); mTopicDetailTitleBackIv.setImageResource(R.drawable.platform_common_back); mTopicDetailTitleTopRightTv.setImageResource(R.drawable.platform_common_notice_more_un); backgroundColor = R.color.dynamic_white; } collapsingToolbarLayout.setTitle(topicTitle); //使用下面两个CollapsingToolbarLayout的方法设置展开透明->折叠时你想要的颜色 collapsingToolbarLayout.setExpandedTitleColor(getResources().getColor(R.color.dynamic_transparent)); collapsingToolbarLayout.setCollapsedTitleTextColor(getResources().getColor(R.color.dynamic_black)); } else if (verticalOffset >= -appBarLayout.getTotalScrollRange() / 5) { collapsingToolbarLayout.setTitle(""); if (backgroundColor != R.color.dynamic_transparent) { alPhaAnimation(mToolbar, 1, 0f, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); mToolbar.setBackgroundColor(getResources().getColor(R.color.dynamic_transparent)); mToolbar.setAlpha(1f); mTopicDetailTitleBackIv.setImageResource(R.drawable.dynamic_titlebar_back2); mTopicDetailTitleTopRightTv.setImageResource(R.drawable.dynamic_more_green2); } }); backgroundColor = R.color.dynamic_transparent; } } else { if (backgroundColor != R.color.dynamic_transparent) { mToolbar.setBackgroundColor(getResources().getColor(R.color.dynamic_transparent)); mToolbar.setAlpha(1f); mTopicDetailTitleBackIv.setImageResource(R.drawable.dynamic_titlebar_back2); mTopicDetailTitleTopRightTv.setImageResource(R.drawable.dynamic_more_green2); backgroundColor = R.color.dynamic_transparent; } collapsingToolbarLayout.setTitle(""); } } }); } private void alPhaAnimation(View v, float originAlpha, float desAlpha, @Nullable AnimatorListenerAdapter listener) { ObjectAnimator animator = ObjectAnimator.ofFloat(v, "alpha", originAlpha, desAlpha); animator.setDuration(200); animator.start(); if (listener != null) { animator.addListener(listener); } } private void initDatas() { selectTab = 0; backgroundColor = -1; totalMembers = 0; topicId = getIntent().getStringExtra("topic_id"); isSplash = getIntent().getBooleanExtra("isSplash", false); adapter = new TopicDetailMemberAdapter(this); mFragments = new Fragment[]{TrendListInFragment.newInstance("1", topicId, "default", "0"), TrendListInFragment.newInstance("2", topicId, "default", "0")}; mRecommendTopAdapter = new RecommendTopAdapter(this); } @NonNull @Override public TopicDetailPresenterImpl createPresenter() { return new TopicDetailPresenterImpl(); } @Override public void onRefresh() { mSwl.setRefreshing(true); fetchDatas(); if (selectTab == 0) { LogUtil.d("send to refresh"); Message message = mHandler1.obtainMessage(DynamicConstants.TOPIC_DETAIL_NEW_REFRESH, topicId); message.sendToTarget(); } else if (selectTab == 1) { LogUtil.d("send to refresh"); Message message = mHandler2.obtainMessage(DynamicConstants.TOPIC_DETAIL_HOT_REFRESH, topicId); message.sendToTarget(); } } private Handler mHandler1; private Handler mHandler2; public void setHandler(Handler handler, String tab) { LogUtil.d("tab: " + tab); if (tab.equals("1")) { mHandler1 = handler; } else if (tab.equals("2")) { mHandler2 = handler; } } @OnClick({R2.id.item_topic_detail_new_rel, R2.id.item_topic_detail_hot_rel, R2.id.publish_trend_btn, R2.id.topic_detail_focus_tv, R2.id.topic_detail_users_rel, R2.id.topic_detail_title_top_right_tv, R2.id.topic_detail_title_back_iv}) void doClick(View view) { if (view.getId() == R.id.item_topic_detail_new_rel) { mTopicDetailVp.setCurrentItem(0); setTabSelection(0); } else if (view.getId() == R.id.item_topic_detail_hot_rel) { mTopicDetailVp.setCurrentItem(1); setTabSelection(1); } else if (view.getId() == R.id.publish_trend_btn) { if (!DynamicIn.INSTANCE.isLogin()) { startActivity(DynamicIn.INSTANCE.loginWayIntent(TopicDetailActivity.this)); } else { Intent intent = new Intent(); intent.setClass(TopicDetailActivity.this, PublishTrendActivity.class); Bundle bundle = new Bundle(); bundle.putString(DynamicConstants.PUBLISH_TYPE, "topic_publish"); bundle.putString("topic_id", topicId); bundle.putString("topic_title", topicTitle); intent.putExtra("bundle", bundle); startActivity(intent); } } else if (view.getId() == R.id.topic_detail_focus_tv) { if (!DynamicIn.INSTANCE.isLogin()) { startActivity(DynamicIn.INSTANCE.loginWayIntent(TopicDetailActivity.this)); } else { getPresenter().focusTopic(topicId); } } else if (view.getId() == R.id.topic_detail_users_rel) { String url = DynamicConstants.Companion.getTOPIC_DETAIL_H5() + topicId; NewH5Activity.start(getMContext(), new H5Params(url, null)); } else if (view.getId() == R.id.topic_detail_title_top_right_tv) { if (share == null) { return; } ShowCustomShareDialog(share.title, share.shareUrl, share.desc, share.cover); } else if (view.getId() == R.id.topic_detail_title_back_iv) { back(); } } private void back() { if (isSplash) { DynamicIn.INSTANCE.mainIntent(this); } finish(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { back(); return true; } return super.onKeyDown(keyCode, event); } private void ShowCustomShareDialog(final String share_title, final String share_url, final String share_context, final String share_head) { View view = getLayoutInflater().inflate(R.layout.dynamic_share_select_dialog, null); final Dialog dialog = new Dialog(this, R.style.transparentFrameWindowStyle); dialog.setContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); Window window = dialog.getWindow(); // 设置显示动画 window.setWindowAnimations(R.style.main_menu_animstyle); WindowManager.LayoutParams wl = window.getAttributes(); wl.x = 0; wl.y = getWindowManager().getDefaultDisplay().getHeight(); // 以下这两句是为了保证按钮可以水平满屏 wl.width = ViewGroup.LayoutParams.MATCH_PARENT; wl.height = ViewGroup.LayoutParams.WRAP_CONTENT; // 设置显示位置 dialog.onWindowAttributesChanged(wl); // 设置点击外围解散 dialog.setCanceledOnTouchOutside(true); LinearLayout wechat_lin = (LinearLayout) view.findViewById(R.id.share_weichat); LinearLayout pyq_lin = (LinearLayout) view.findViewById(R.id.share_pyq); LinearLayout qqzone_lin = (LinearLayout) view.findViewById(R.id.share_qqzone); LinearLayout qq_lin = (LinearLayout) view.findViewById(R.id.share_qq); LinearLayout backhome_lin = (LinearLayout) view.findViewById(R.id.share_back_home); if (!TopicDetailActivity.this.isFinishing() && !dialog.isShowing()) { dialog.show(); } wechat_lin.setOnClickListener(v -> { ShareUtils.INSTANCE.shareTo(SHARE_MEDIA.WEIXIN, TopicDetailActivity.this, share_title, share_url, share_context, share_head); dialog.dismiss(); }); pyq_lin.setOnClickListener(v -> { ShareUtils.INSTANCE.shareTo(SHARE_MEDIA.WEIXIN_CIRCLE, TopicDetailActivity.this, share_title, share_url, share_context, share_head); dialog.dismiss(); }); qqzone_lin.setOnClickListener(v -> { ShareUtils.INSTANCE.shareTo(SHARE_MEDIA.QZONE, TopicDetailActivity.this, share_title, share_url, share_context, share_head); dialog.dismiss(); }); qq_lin.setOnClickListener(v -> { ShareUtils.INSTANCE.shareTo(SHARE_MEDIA.QQ, TopicDetailActivity.this, share_title, share_url, share_context, share_head); dialog.dismiss(); }); backhome_lin.setOnClickListener(v -> { DynamicIn.INSTANCE.mainIntent(this); dialog.dismiss(); }); } private void resetText() { mItemTopicDetailNewTv.setTextColor(getResources().getColor(R.color.dynamic_text_gray)); mItemTopicDetailNewHintTv.setBackgroundColor(getResources().getColor(R.color.dynamic_white)); mItemTopicDetailHotTv.setTextColor(getResources().getColor(R.color.dynamic_text_gray)); mItemTopicDetailHotHintTv.setBackgroundColor(getResources().getColor(R.color.dynamic_white)); } private void setTabSelection(int index) { // 重置按钮 resetText(); switch (index) { case 0: if (mTopicDetailVp.getCurrentItem() != 0) { mTopicDetailVp.setCurrentItem(0); } selectTab = 0; mItemTopicDetailNewTv.setTextColor(getResources().getColor(R.color.dynamic_main_theme)); mItemTopicDetailNewHintTv.setBackgroundColor(getResources().getColor(R.color.dynamic_main_theme)); break; case 1: if (mTopicDetailVp.getCurrentItem() != 1) { mTopicDetailVp.setCurrentItem(1); } selectTab = 1; mItemTopicDetailHotTv.setTextColor(getResources().getColor(R.color.dynamic_main_theme)); mItemTopicDetailHotHintTv.setBackgroundColor(getResources().getColor(R.color.dynamic_main_theme)); break; } } private void fetchDatas() { getPresenter().getTopicDetail(topicId); } @Override public void showToast(String msg) { } private TopicDetailBean.Share share; @Override public void showTopicHeadDetail(TopicDetailBean topicDetail) { topicTitle = topicDetail.topic.title; totalMembers = topicDetail.totalMembers; String is_focused = topicDetail.topic.isFocused; String cover = topicDetail.topic.cover; mTopicDetailTitleTv.setText(topicDetail.topic.title); mTopicDetailSurveyTv.setText(topicDetail.topic.description); mTopicDetailVisitNumTv.setText("" + topicDetail.topic.visitCount); mTopicDetailTrendNumTv.setText("" + topicDetail.topic.postsCount); GlideApp.with(TopicDetailActivity.this) .load(cover) .placeholder(R.drawable.dynamic_default_img) .error(R.drawable.dynamic_default_img) .into(mTopicDetailTopBgIv); mTopicDetailFocusTv.setBackgroundResource("1".equals(is_focused) ? R.drawable.dynamic_focused_topic_detail_bg : R.drawable.dynamic_focus_topic_detail_bg); mTopicDetailFocusTv.setTextColor(getResources().getColor("1".equals(is_focused) ? R.color.platform_white : R.color.dynamic_but_text_color)); mTopicDetailFocusTv.setText("1".equals(is_focused) ? this.getString(R.string.dynamic_trend_foucused) : "+" + this.getString(R.string.dynamic_trend_foucus)); if (!"2".equals(topicId)) { mTopicDetailFocusTv.setVisibility(View.VISIBLE); } adapter.setDatas(topicDetail.members); mTopicDetailUsersNumTv.setText(topicDetail.totalMembers + "人"); share = topicDetail.share; if (topicDetail.top_data != null && topicDetail.top_data.size() > 0) { divideLine.setVisibility(View.VISIBLE); topTrendsRcv.setVisibility(View.VISIBLE); mRecommendTopAdapter.setExtData(topicDetail.top_data); mRecommendTopAdapter.notifyDataSetChanged(); } else { divideLine.setVisibility(View.GONE); topTrendsRcv.setVisibility(View.GONE); } } @Override public void showLoadingView(String message) { if (mSwl.isRefreshing()) { return; } vLoading.setVisibility(View.VISIBLE); vLoading.setViewType(LogoLoadingView.TYPE_LOADING, null); } @Override public void hideLoadingView() { vLoading.setVisibility(View.GONE); } @Override public void hideProgressView() { vLoading.setVisibility(View.GONE); if (mSwl.isRefreshing()) { mSwl.setRefreshing(false); } } @Override public void showFocusResult(Focus result) { //关注成功 String status = String.valueOf(result.status);//1关注,2取消关注 //关注成功 if ("1".equals(status)) { BuryPointUtils.getInstance().createMap() .put("theme_name", topicTitle) .put("theme_ID", topicId) .burryPoint("Theme_attention"); totalMembers += 1; mTopicDetailUsersNumTv.setText(totalMembers + "人"); mTopicDetailFocusTv.setBackgroundResource(R.drawable.dynamic_focused_topic_detail_bg); mTopicDetailFocusTv.setText(this.getString(R.string.dynamic_trend_foucused)); TopicDetailBean.Member member = new TopicDetailBean.Member(); member.head = DynamicIn.INSTANCE.getUserInfo().getHead(); member.uid = DynamicIn.INSTANCE.getUserInfo().getUid() + ""; adapter.addData(0, member); } else { totalMembers = totalMembers - 1; mTopicDetailUsersNumTv.setText(totalMembers + "人"); mTopicDetailFocusTv.setBackgroundResource(R.drawable.dynamic_focus_topic_detail_bg); mTopicDetailFocusTv.setText("+" + this.getString(R.string.dynamic_trend_foucus)); if (adapter.getDatas() != null && adapter.getDatas().size() > 0) { for (TopicDetailBean.Member m : adapter.getDatas()) { if (m.uid.equals(DynamicIn.INSTANCE.getUserInfo().getUid())) { adapter.removeData(m); } } } } } @Override public void showErrorView() { vLoading.setVisibility(View.VISIBLE); vLoading.setViewType(LogoLoadingView.TYPE_NET_LOSS, "哎呦,网络开小差了"); } @Override public void showFocusError(Throwable throwable) { vLoading.setVisibility(View.VISIBLE); vLoading.setViewType(LogoLoadingView.TYPE_NET_LOSS, "哎呦,网络开小差了"); } @Override protected int layoutResId() { return 0; } @Override protected void initDataAndEvent() { } }