1. 程式人生 > >recyclerView多條目展示,ArgbEvaluator顏色漸變

recyclerView多條目展示,ArgbEvaluator顏色漸變

效果圖


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);
    }
}