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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值