package com.zcy.ghost.vivideo.ui.view; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.support.annotation.Nullable; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.widget.TextView; import com.jude.easyrecyclerview.EasyRecyclerView; import com.jude.easyrecyclerview.adapter.RecyclerArrayAdapter; import com.jude.easyrecyclerview.decoration.SpaceDecoration; import com.jude.rollviewpager.hintview.IconHintView; import com.zcy.ghost.vivideo.R; import com.zcy.ghost.vivideo.base.RootView; import com.zcy.ghost.vivideo.model.bean.VideoInfo; import com.zcy.ghost.vivideo.model.bean.VideoRes; import com.zcy.ghost.vivideo.presenter.contract.RecommendContract; import com.zcy.ghost.vivideo.ui.activitys.MainActivity; import com.zcy.ghost.vivideo.ui.activitys.SearchActivity; import com.zcy.ghost.vivideo.ui.adapter.BannerAdapter; import com.zcy.ghost.vivideo.ui.adapter.RecommendAdapter; import com.zcy.ghost.vivideo.utils.EventUtil; import com.zcy.ghost.vivideo.utils.JumpUtil; import com.zcy.ghost.vivideo.utils.Preconditions; import com.zcy.ghost.vivideo.utils.ScreenUtil; import com.zcy.ghost.vivideo.widget.RollPagerView; import com.zcy.ghost.vivideo.widget.theme.ColorRelativeLayout; import com.zcy.ghost.vivideo.widget.theme.ColorTextView; import org.simple.eventbus.EventBus; import org.simple.eventbus.Subscriber; import java.io.Serializable; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * Description: OneView * Creator: yxc * date: 2016/9/21 17:56 */ public class RecommendView extends RootView<RecommendContract.Presenter> implements RecommendContract.View, SwipeRefreshLayout.OnRefreshListener, View.OnClickListener { @BindView(R.id.recyclerView) EasyRecyclerView recyclerView; @Nullable @BindView(R.id.title) ColorRelativeLayout title; @BindView(R.id.title_name) ColorTextView titleName; RollPagerView banner; View headerView; RecommendAdapter adapter; TextView etSearchKey; RelativeLayout rlGoSearch; List<VideoInfo> recommend; public RecommendView(Context context) { super(context); } public RecommendView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void getLayout() { inflate(mContext, R.layout.fragment_recommend_view, this); } @Override protected void initView() { title.setVisibility(View.GONE); titleName.setText("精选"); headerView = LayoutInflater.from(mContext).inflate(R.layout.recommend_header, null); banner = ButterKnife.findById(headerView, R.id.banner); rlGoSearch = ButterKnife.findById(headerView, R.id.rlGoSearch); etSearchKey = ButterKnife.findById(headerView, R.id.etSearchKey); banner.setPlayDelay(2000); recyclerView.setAdapterWithProgress(adapter = new RecommendAdapter(getContext())); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setErrorView(R.layout.view_error); SpaceDecoration itemDecoration = new SpaceDecoration(ScreenUtil.dip2px(getContext(), 8)); itemDecoration.setPaddingEdgeSide(true); itemDecoration.setPaddingStart(true); itemDecoration.setPaddingHeaderFooter(false); recyclerView.addItemDecoration(itemDecoration); } @Override protected void initEvent() { title.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (EventUtil.isFastDoubleClick()) { recyclerView.scrollToPosition(0); } } }); recyclerView.setRefreshListener(this); recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (getHeaderScroll() <= ScreenUtil.dip2px(mContext, 150)) { new Handler().postAtTime(new Runnable() { @Override public void run() { float percentage = (float) getHeaderScroll() / ScreenUtil.dip2px(mContext, 150); title.setAlpha(percentage); if (percentage > 0) title.setVisibility(View.VISIBLE); else title.setVisibility(View.GONE); } }, 300); } else { title.setAlpha(1.0f); title.setVisibility(View.VISIBLE); } } }); adapter.setOnItemClickListener(new RecyclerArrayAdapter.OnItemClickListener() { @Override public void onItemClick(int position) { JumpUtil.go2VideoInfoActivity(mContext, adapter.getItem(position)); } }); recyclerView.getErrorView().setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { recyclerView.showProgress(); onRefresh(); } }); rlGoSearch.setOnClickListener(this); } @Override public boolean isActive() { return mActive; } @Override public void setPresenter(RecommendContract.Presenter presenter) { mPresenter = Preconditions.checkNotNull(presenter); } @Override public void showError(String msg) { EventUtil.showToast(mContext, msg); } @Override public void showContent(final VideoRes videoRes) { if (videoRes != null) { adapter.clear(); List<VideoInfo> videoInfos; for (int i = 1; i < videoRes.list.size(); i++) { if (videoRes.list.get(i).title.equals("精彩推荐")) { videoInfos = videoRes.list.get(i).childList; adapter.addAll(videoInfos); break; } } for (int i = 1; i < videoRes.list.size(); i++) { if (videoRes.list.get(i).title.equals("免费推荐")) { recommend = videoRes.list.get(i).childList; break; } } if (adapter.getHeaderCount() == 0) { adapter.addHeader(new RecyclerArrayAdapter.ItemView() { @Override public View onCreateView(ViewGroup parent) { banner.setHintView(new IconHintView(getContext(), R.mipmap.ic_page_indicator_focused, R.mipmap.ic_page_indicator, ScreenUtil.dip2px(getContext(), 10))); banner.setHintPadding(0, 0, 0, ScreenUtil.dip2px(getContext(), 8)); banner.setAdapter(new BannerAdapter(getContext(), videoRes.list.get(0).childList)); return headerView; } @Override public void onBindView(View headerView) { } }); } } } @Override public void refreshFaild(String msg) { if (!TextUtils.isEmpty(msg)) showError(msg); recyclerView.showError(); } @Subscriber(tag = MainActivity.Banner_Stop) public void stopBanner(boolean stop) { if (stop) { banner.pause(); } else { banner.resume(); } } @Override public void onRefresh() { mPresenter.onRefresh(); } private int getHeaderScroll() { if (headerView == null) { return 0; } int distance = headerView.getTop(); distance = Math.abs(distance); return distance; } @Override public void onClick(View view) { switch (view.getId()) { case R.id.rlGoSearch: Intent intent = new Intent(mContext, SearchActivity.class); intent.putExtra("recommend", (Serializable) recommend); mContext.startActivity(intent); break; } } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); EventBus.getDefault().register(this); } @Override protected void onDetachedFromWindow() { EventBus.getDefault().unregister(this); super.onDetachedFromWindow(); } }