When I first joined the company, I heard technicians talk about the "ranking" function in the source code of the live APP. The first thing I thought of was the ranking of students' achievements. Those who were on the list were complacent until the next exam, and those who were on the list were crying. In fact, even if they were on the list, there was no substantive reward, and there was little difference between the 10th place on the list and the 11th place on the list, but we still tried our best to make ourselves "on the list", To meet psychological needs.
In the live broadcast APP, the role of the leaderboard for "local tyrants" is also set to meet their psychological needs and stimulate users to reward the list. For the anchor, it is useful to increase popularity and provide a reference for the anchor's traffic realization activities such as receiving advertisements.
This article mainly describes how to realize the leaderboard function in the source code of Android live app. As shown in the figure below, there are two buttons: revenue list and contribution list on the home page of cloudleopard live app. Click to enter the corresponding leaderboard list page respectively.
Whether you enter the revenue list or the contribution list, you can switch to another list again (two-way). The top of the revenue list shows the top three anchors with the highest revenue, and the top of the contribution list shows the three users with the most consumption. The following users are listed in reverse order of revenue and consumption. Users can click the corresponding avatar to enter the home page.
The source code of some live broadcast app s is as follows:
public class RankActivity extends AbsActivity { public static void forward(Context context, int position) { Intent intent = new Intent(context, RankActivity.class); intent.putExtra(Constants.LIVE_POSITION, position); context.startActivity(intent); } @Override protected boolean isStatusBarWhite() { return true; } @Override protected int getLayoutId() { return R.layout.activity_rank; } @Override protected void main() { int position = getIntent().getIntExtra(Constants.LIVE_POSITION, 0); MainListViewHolder viewHolder = new MainListViewHolder(mContext, (ViewGroup) findViewById(R.id.container)); viewHolder.addToParent(); viewHolder.subscribeActivityLifeCycle(); viewHolder.loadData(position); } } public class MainListViewHolder extends AbsMainViewHolder { private static final int PAGE_COUNT = 2; private List<FrameLayout> mViewList; private AbsMainListChildViewHolder[] mViewHolders; private MainListProfitViewHolder mProfitViewHolder;//Revenue list private MainListContributeViewHolder mContributeViewHolder;//Contribution list private MagicIndicator mIndicator; private ViewPager mViewPager; public MainListViewHolder(Context context, ViewGroup parentView) { super(context, parentView); } @Override protected int getLayoutId() { return R.layout.view_main_list; } @Override public void init() { mViewList = new ArrayList<>(); for (int i = 0; i < PAGE_COUNT; i++) { FrameLayout frameLayout = new FrameLayout(mContext); frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mViewList.add(frameLayout); } mViewHolders = new AbsMainListChildViewHolder[PAGE_COUNT]; mViewPager = (ViewPager) findViewById(R.id.viewPager); mViewPager.setOffscreenPageLimit(PAGE_COUNT - 1); mViewPager.setAdapter(new ViewPagerAdapter(mViewList)); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { loadPageData(position); } @Override public void onPageScrollStateChanged(int state) { } }); mIndicator = (MagicIndicator) findViewById(R.id.indicator); final String[] titles = new String[]{ WordUtil.getString(R.string.main_list_profit), WordUtil.getString(R.string.main_list_contribute) }; CommonNavigator commonNavigator = new CommonNavigator(mContext); commonNavigator.setAdapter(new CommonNavigatorAdapter() { @Override public int getCount() { return titles.length; } @Override public IPagerTitleView getTitleView(Context context, final int index) { SimplePagerTitleView simplePagerTitleView = new ColorTransitionPagerTitleView(context); simplePagerTitleView.setNormalColor(0xccffffff); simplePagerTitleView.setSelectedColor(ContextCompat.getColor(mContext, R.color.white)); simplePagerTitleView.setText(titles[index]); simplePagerTitleView.setTextSize(18); simplePagerTitleView.getPaint().setFakeBoldText(true); simplePagerTitleView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mViewPager != null) { mViewPager.setCurrentItem(index); } } }); return simplePagerTitleView; } @Override public IPagerIndicator getIndicator(Context context) { LinePagerIndicator linePagerIndicator = new LinePagerIndicator(context); linePagerIndicator.setMode(LinePagerIndicator.MODE_WRAP_CONTENT); linePagerIndicator.setXOffset(DpUtil.dp2px(13)); linePagerIndicator.setRoundRadius(DpUtil.dp2px(2)); linePagerIndicator.setColors(ContextCompat.getColor(mContext, R.color.white)); return linePagerIndicator; } }); mIndicator.setNavigator(commonNavigator); ViewPagerHelper.bind(mIndicator, mViewPager); EventBus.getDefault().register(MainListViewHolder.this); } private void loadPageData(int position) { if (mViewHolders == null) { return; } AbsMainListChildViewHolder vh = mViewHolders[position]; if (vh == null) { if (mViewList != null && position < mViewList.size()) { FrameLayout parent = mViewList.get(position); if (parent == null) { return; } if (position == 0) { mProfitViewHolder = new MainListProfitViewHolder(mContext, parent); vh = mProfitViewHolder; } else if (position == 1) { mContributeViewHolder = new MainListContributeViewHolder(mContext, parent); vh = mContributeViewHolder; } if (vh == null) { return; } mViewHolders[position] = vh; vh.addToParent(); vh.subscribeActivityLifeCycle(); } } if (vh != null) { vh.loadData(); } } public void loadData(int position) { if (mViewPager != null) { int curPosition = mViewPager.getCurrentItem(); if (curPosition == position) { loadPageData(curPosition); } else { mViewPager.setCurrentItem(position); } } } @Override public void loadData() { if (mViewPager != null) { loadPageData(mViewPager.getCurrentItem()); } } @Override public void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(MainListViewHolder.this); } @Subscribe(threadMode = ThreadMode.MAIN) public void onFollowEvent(FollowEvent e) { if (mViewHolders != null) { for (AbsMainListChildViewHolder vh : mViewHolders) { if (vh != null) { vh.onFollowEvent(e.getToUid(), e.getIsAttention()); } } } } }
public abstract class AbsMainListChildViewHolder extends AbsMainViewHolder implements OnItemClickListener, View.OnClickListener {
public static final String DAY = "day"; public static final String WEEK = "week"; public static final String MONTH = "month"; public static final String TOTAL = "total"; protected String mType; protected CommonRefreshView mRefreshView; protected MainListAdapter mAdapter; public AbsMainListChildViewHolder(Context context, ViewGroup parentView) { super(context, parentView); mType = DAY; } @Override protected int getLayoutId() { return R.layout.view_main_list_page; } @Override public void init() { mRefreshView = (CommonRefreshView) findViewById(R.id.refreshView); mRefreshView.setEmptyLayoutId(R.layout.view_no_data_list); mRefreshView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false)); findViewById(R.id.btn_day).setOnClickListener(this); findViewById(R.id.btn_week).setOnClickListener(this); findViewById(R.id.btn_month).setOnClickListener(this); findViewById(R.id.btn_total).setOnClickListener(this); } @Override public void loadData() { if (!isFirstLoadData()) { return; } if (mRefreshView != null) { mRefreshView.initData(); } } @Override public void onDestroy() { super.onDestroy(); CommonHttpUtil.cancel(CommonHttpConsts.SET_ATTENTION); } public void onFollowEvent(String touid, int isAttention) { if (mAdapter != null) { mAdapter.updateItem(touid, isAttention); } } @Override public void onItemClick(ListBean bean, int position) { RouteUtil.forwardUserHome(mContext, bean.getUid()); } @Override public void onClick(View v) { int i = v.getId(); String type = null; if (i == R.id.btn_day) { type = DAY; } else if (i == R.id.btn_week) { type = WEEK; } else if (i == R.id.btn_month) { type = MONTH; } else if (i == R.id.btn_total) { type = TOTAL; } if (!TextUtils.isEmpty(type) && !type.equals(mType)) { mType = type; if (mRefreshView != null) { mRefreshView.initData(); } } } } /** * Home page ranking revenue list */ public class MainListProfitViewHolder extends AbsMainListChildViewHolder { public MainListProfitViewHolder(Context context, ViewGroup parentView) { super(context, parentView); } @Override public void init() { super.init(); mRefreshView.setDataHelper(new CommonRefreshView.DataHelper<ListBean>() { @Override public RefreshAdapter<ListBean> getAdapter() { if (mAdapter == null) { mAdapter = new MainListAdapter(mContext, MainListAdapter.TYPE_PROFIT); mAdapter.setOnItemClickListener(MainListProfitViewHolder.this); } return mAdapter; } @Override public void loadData(int p, HttpCallback callback) { if(!mType.isEmpty()){ MainHttpUtil.profitList(mType, p, callback); } } @Override public List<ListBean> processData(String[] info) { return JSON.parseArray(Arrays.toString(info), ListBean.class); } @Override public void onRefreshSuccess(List<ListBean> list, int listCount) { } @Override public void onRefreshFailure() { } @Override public void onLoadMoreSuccess(List<ListBean> loadItemList, int loadItemCount) { } @Override public void onLoadMoreFailure() { } }); } @Override public void onDestroy() { super.onDestroy(); MainHttpUtil.cancel(MainHttpConsts.PROFIT_LIST); } } /** * Home page ranking contribution list */ public class MainListContributeViewHolder extends AbsMainListChildViewHolder { public MainListContributeViewHolder(Context context, ViewGroup parentView) { super(context, parentView); } @Override public void init() { super.init(); mRefreshView.setDataHelper(new CommonRefreshView.DataHelper<ListBean>() { @Override public RefreshAdapter<ListBean> getAdapter() { if (mAdapter == null) { mAdapter = new MainListAdapter(mContext, MainListAdapter.TYPE_CONTRIBUTE); mAdapter.setOnItemClickListener(MainListContributeViewHolder.this); } return mAdapter; } @Override public void loadData(int p, HttpCallback callback) { if (!mType.isEmpty()) { MainHttpUtil.consumeList(mType, p, callback); } } @Override public List<ListBean> processData(String[] info) { return JSON.parseArray(Arrays.toString(info), ListBean.class); } @Override public void onRefreshSuccess(List<ListBean> list, int listCount) { } @Override public void onRefreshFailure() { } @Override public void onLoadMoreSuccess(List<ListBean> loadItemList, int loadItemCount) { } @Override public void onLoadMoreFailure() { } }); } @Override public void onDestroy() { super.onDestroy(); MainHttpUtil.cancel(MainHttpConsts.CONSUME_LIST); } }
The above is the whole content of how to realize the ranking function in the Android live app source code. In addition to the ranking function, there are many functions in the cloud leopard live app source code to promote users' reward and promote platform profitability. The specific content will be released gradually in the future. Please look forward to it.
Statement: the above contents are original by cloudleopard technology. Reprinting without the consent of the company is prohibited, otherwise relevant legal responsibilities will be investigated http://www.yunbaokj.com/news/html/2085.html