recyclerView多條目展示,ArgbEvaluator顏色漸變
阿新 • • 發佈:2019-01-23
效果圖
adapter
package com.example.liuan.takeout.ui.adapter; import android.app.Activity; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.RatingBar; import android.widget.TextView; import com.daimajia.slider.library.Animations.DescriptionAnimation; import com.daimajia.slider.library.SliderLayout; import com.daimajia.slider.library.SliderTypes.BaseSliderView; import com.daimajia.slider.library.SliderTypes.TextSliderView; import com.example.liuan.takeout.R; import com.example.liuan.takeout.model.bean.HomeInfo; import com.example.liuan.takeout.model.bean.Promotion; import butterknife.Bind; import butterknife.ButterKnife; /** * Name: HomeAdapter * Action: * Author: liuan * creatTime:2017-02-05 10:39 */ public class HomeAdapter extends RecyclerView.Adapter { private static final int ITEM_HEADER = 0;//最上面 private static final int ITEM_SELLER = 1;//一般商家 private static final int ITEM_DIV = 2;//分割線 private Activity activity; private HomeInfo data; public HomeAdapter(Activity activity) { this.activity = activity; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //返回包含的view的VIewHolder //viewType就是在getItemViewType(position)返回狀態碼中的某一個 switch (viewType) { case ITEM_HEADER: //準備view 上下文也能用activity View view = View.inflate(parent.getContext(), R.layout.item_title, null); HeaderHolder headerHolder = new HeaderHolder(view); return headerHolder; case ITEM_SELLER: View view2 = View.inflate(parent.getContext(), R.layout.item_seller, null); SellerHolder sellerHolder = new SellerHolder(view2); return sellerHolder; case ITEM_DIV: View view3 = View.inflate(parent.getContext(), R.layout.item_division, null); DivHolder divHolder = new DivHolder(view3); return divHolder; } return null; } //給ViewHolder繫結資料 @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { // if(holder instanceof SellerHolder){} // if(holder instanceof SellerHolder){} // if(holder instanceof SellerHolder){} if (position == 0) { } else if (data.getBody().get(position - 1).type == 0) { //商家 setSellerHolderDataHolderData(holder, position - 1); } else { //分割線條目 //給divHolder中的多個TextViee賦值 setDIVHolderData(holder, position - 1); } } private void setSellerHolderDataHolderData(RecyclerView.ViewHolder holder, int position) { ((SellerHolder) holder).tvTitle.setText(data.getBody().get(position).getSeller().getName()); ((SellerHolder) holder).tvCount.setText(data.getBody().get(position).getSeller().getScore()); ((SellerHolder) holder).ratingBar.setNumStars(5); } private void setDIVHolderData(RecyclerView.ViewHolder holder, int position) { ((DivHolder) holder).tv1.setText(data.getBody().get(position).getRecommendInfos().get(0)); ((DivHolder) holder).tv2.setText(data.getBody().get(position).getRecommendInfos().get(1)); ((DivHolder) holder).tv3.setText(data.getBody().get(position).getRecommendInfos().get(2)); ((DivHolder) holder).tv4.setText(data.getBody().get(position).getRecommendInfos().get(3)); ((DivHolder) holder).tv5.setText(data.getBody().get(position).getRecommendInfos().get(4)); ((DivHolder) holder).tv6.setText(data.getBody().get(position).getRecommendInfos().get(5)); } //多條目展示需要使用此方法 @Override public int getItemViewType(int position) { //索引位置為0的時候 header條目 //伺服器端傳遞type為1 的時候 分割線條目 //伺服器端傳遞type為0 的時候 一般商家條目 if (position == 0) { return ITEM_HEADER; } else if (data.getBody().get(position - 1).type == 0) { return ITEM_SELLER; } else { return ITEM_DIV; } } @Override public int getItemCount() { if (data != null && data.getBody() != null && data.getHead() != null && data.getBody().size() > 0) { return data.getBody().size() + 1; } return 0; } public void setData(HomeInfo data) { this.data = data; notifyDataSetChanged(); } class HeaderHolder extends RecyclerView.ViewHolder { //在建立holder的時候 必須傳遞一個view物件 就是一個條目的佈局轉換成view物件 @Bind(R.id.slider) SliderLayout slider; public HeaderHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); //data物件header裡面 int picCount = data.getHead().getPromotionList().size(); for (int i = 0; i < picCount; i++) { //顯示圖片和描述文字的控制元件 TextSliderView textSliderView = new TextSliderView(activity); Promotion promotion = data.getHead().getPromotionList().get(i); //指定了描述文字 textSliderView.description(promotion.getInfo()) //圖片連線地址 .image(promotion.getPic()) //圖片展示方式 .setScaleType(BaseSliderView.ScaleType.Fit); //將textSliderView加進去 slider.addSlider(textSliderView); //動畫型別 } slider.setPresetTransformer(SliderLayout.Transformer.RotateDown); //可以設定輪播容器內部點所在位置 slider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom); //文字描述出現的時候 指定的動畫 slider.setCustomAnimation(new DescriptionAnimation()); slider.setDuration(4000); } } class SellerHolder extends RecyclerView.ViewHolder { @Bind(R.id.tvCount) TextView tvCount; @Bind(R.id.tv_title) TextView tvTitle; @Bind(R.id.ratingBar) RatingBar ratingBar; //在建立holder的時候 必須傳遞一個view物件 就是一個條目的佈局轉換成view物件 public SellerHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } class DivHolder extends RecyclerView.ViewHolder { @Bind(R.id.tv_division_title) TextView tvDivisionTitle; @Bind(R.id.tv1) TextView tv1; @Bind(R.id.tv2) TextView tv2; @Bind(R.id.tv3) TextView tv3; @Bind(R.id.tv4) TextView tv4; @Bind(R.id.tv5) TextView tv5; @Bind(R.id.tv6) TextView tv6; //在建立holder的時候 必須傳遞一個view物件 就是一個條目的佈局轉換成view物件 public DivHolder(View itemView) { super(itemView); ButterKnife.bind(this, itemView); } } }
HomeFragment
package com.example.liuan.takeout.ui.fragment; import android.animation.ArgbEvaluator; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import com.example.liuan.takeout.R; import com.example.liuan.takeout.presenter.net.HomePresenter; import com.example.liuan.takeout.ui.adapter.HomeAdapter; import butterknife.Bind; import butterknife.ButterKnife; /** * Name: HomeFragment * Action: * Author: liuan * creatTime:2017-02-05 09:42 */ public class HomeFragment extends BaseFragment { @Bind(R.id.rv_home) RecyclerView rvHome; @Bind(R.id.home_tv_address) TextView homeTvAddress; @Bind(R.id.ll_title_search) LinearLayout llTitleSearch; @Bind(R.id.ll_title_container) LinearLayout llTitleContainer; private HomeAdapter homeAdapter; private ArgbEvaluator argbEvaluator=new ArgbEvaluator(); private int sumY=0; //開始顏色 //結束顏色 //漸變規則 @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = View.inflate(getActivity(), R.layout.fragment_home, null); ButterKnife.bind(this, view); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { sumY=0; homeAdapter = new HomeAdapter(getActivity()); //設定recyclerVIew模式方向 列表 豎直 rvHome.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false)); rvHome.setAdapter(homeAdapter); HomePresenter homePresenter = new HomePresenter(homeAdapter); homePresenter.getHomeData("",""); rvHome.addOnScrollListener(new RecyclerView.OnScrollListener() { //滾動狀態發生改變 @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } //滾動過程中 需要修改頂部懸浮title顏色 @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { sumY+=dy; //開始顏色 int bgColor=0X553190E8; if(sumY<=0){ //開始顏色 bgColor=0X553190E8; }else if(sumY>=300){ // 終點顏色 bgColor=0XFF3190E8; }else{ //漸變邏輯 //顏色變化 //漸變規則 bgColor = (int) argbEvaluator.evaluate(sumY / 300.0f, 0X553190E8, 0XFF3190E8); } llTitleContainer.setBackgroundColor(bgColor); } }); super.onViewCreated(view, savedInstanceState); } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); } }