package com.codeest.geeknews.ui.gank.fragment; import android.support.design.widget.AppBarLayout; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.bumptech.glide.Glide; import com.codeest.geeknews.R; import com.codeest.geeknews.app.Constants; import com.codeest.geeknews.base.RootFragment; import com.codeest.geeknews.component.ImageLoader; import com.codeest.geeknews.model.bean.GankItemBean; import com.codeest.geeknews.presenter.gank.TechPresenter; import com.codeest.geeknews.base.contract.gank.TechContract; import com.codeest.geeknews.ui.gank.activity.TechDetailActivity; import com.codeest.geeknews.ui.gank.adapter.TechAdapter; import com.codeest.geeknews.util.SystemUtil; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import jp.wasabeef.glide.transformations.BlurTransformation; /** * Created by codeest on 16/8/19. */ public class TechFragment extends RootFragment<TechPresenter> implements TechContract.View { @BindView(R.id.view_main) RecyclerView rvTechContent; @BindView(R.id.swipe_refresh) SwipeRefreshLayout swipeRefresh; @BindView(R.id.iv_tech_blur) ImageView ivBlur; @BindView(R.id.iv_tech_origin) ImageView ivOrigin; @BindView(R.id.tv_tech_copyright) TextView tvCopyright; @BindView(R.id.tech_appbar) AppBarLayout appbar; List<GankItemBean> mList; TechAdapter mAdapter; boolean isLoadingMore = false; String tech; int type; @Override protected void initInject() { getFragmentComponent().inject(this); } @Override protected int getLayoutId() { return R.layout.fragment_tech; } @Override protected void initEventAndData() { super.initEventAndData(); mPresenter.getGirlImage(); mList = new ArrayList<>(); tech = getArguments().getString(Constants.IT_GANK_TYPE); type = getArguments().getInt(Constants.IT_GANK_TYPE_CODE); mAdapter = new TechAdapter(mContext,mList,tech); rvTechContent.setLayoutManager(new LinearLayoutManager(mContext)); rvTechContent.setAdapter(mAdapter); stateLoading(); mPresenter.getGankData(tech, type); mAdapter.setOnItemClickListener(new TechAdapter.OnItemClickListener() { @Override public void onItemClick(int position, View shareView) { TechDetailActivity.launch(new TechDetailActivity.Builder() .setContext(mContext) .setId(mList.get(position).get_id()) .setTitle(mList.get(position).getDesc()) .setUrl(mList.get(position).getUrl()) .setType(type) .setAnimConfig(mActivity, shareView)); } }); rvTechContent.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int lastVisibleItem = ((LinearLayoutManager) rvTechContent.getLayoutManager()).findLastVisibleItemPosition(); int totalItemCount = rvTechContent.getLayoutManager().getItemCount(); if (lastVisibleItem >= totalItemCount - 2 && dy > 0) { //还剩2个Item时加载更多 if(!isLoadingMore){ isLoadingMore = true; mPresenter.getMoreGankData(tech); } } } }); appbar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset >= 0) { swipeRefresh.setEnabled(true); } else { swipeRefresh.setEnabled(false); float rate = (float)(SystemUtil.dp2px(mContext, 256) + verticalOffset * 2) / SystemUtil.dp2px(mContext, 256); if (rate >= 0) ivOrigin.setAlpha(rate); } } }); swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { mPresenter.getGankData(tech, type); } }); } @Override public void stateError() { super.stateError(); if(swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } } @Override public void showContent(List<GankItemBean> list) { if(swipeRefresh.isRefreshing()) { swipeRefresh.setRefreshing(false); } stateMain(); mList.clear(); mList.addAll(list); mAdapter.notifyDataSetChanged(); } @Override public void showMoreContent(List<GankItemBean> list) { stateMain(); mList.addAll(list); mAdapter.notifyDataSetChanged(); isLoadingMore = false; } @Override public void showGirlImage(String url, String copyright) { ImageLoader.load(mContext, url, ivOrigin); Glide.with(mContext).load(url).bitmapTransform(new BlurTransformation(mContext)).into(ivBlur); tvCopyright.setText(String.format("by: %s",copyright)); } }