自定义随动indicator附带title颜色渐变

1. 前言

在观看了#慕课网#hyman讲师所制作的视频《Android-自定义ViewPager指示器》之后,公司刚好遇到了类似的需求,于是自己按照hyman所讲根据自己的需求写了这个指示器,优化了一些代码和加入了简单的动画和title的点击联动部分,希望这个demo能帮到有类似需求的朋友。如果对此控件思路不太熟的朋友,可以看下这个视频讲解,本文是在此视频上做扩展说明。

《Android-自定义ViewPager指示器》链接地址:http://www.imooc.com/learn/615

2. 自定义随动指示器

先上效果图:
indicator

1. 基本思路:

一般我们在做类似的指示器的时候,都会先做指示器,也就是title部分然后再做viewpager部分,通过viewpager联动title实现对应的变化。当然本文的思路也基本类似,通过将title部分进行封装,并将viewpager的OnPageChangeListener中的三个方法中的对应参数传入指示器内,让指示器内部进行相应的显示处理。代码如下:

package com.example.titleindicator;

import java.util.ArrayList;
import com.example.titleindicator.CustomizeIndicator.OnTitleClickListener;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;

public class MainActivity extends Activity implements OnPageChangeListener, OnTitleClickListener {
   

    private CustomizeIndicator indicator;
    private ViewPager viewpager;
    private MyViewPagerAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initalWeight();
        initialIndicator();
    }

    private void initialIndicator() {
        //第一步:找到该控件
        indicator = (CustomizeIndicator) findViewById(R.id.myCustomizeIndicator);
        //第二步:设置title的显示文字
        ArrayList<String> titleName = new ArrayList<String>();
        titleName.add("TitleOne");
        titleName.add("TitleTwo");
        titleName.add("TitleThree");
        titleName.add("TitleFour");
        titleName.add("TitleFive");
        titleName.add("TitleSix");
        indicator.setTitle(titleName);
        //第三步:设置indicator的点击事件
        indicator.setOnTitleClickListener(this);
    }

    private void initalWeight() {
        viewpager = (ViewPager) findViewById(R.id.myViewPager);
        LayoutInflater inflater = getLayoutInflater();
        View view1 = inflater.inflate(R.layout.views, null);
        view1.setBackgroundColor(
        getResources().getColor(R.color.red_color));
        View view2 = inflater.inflate(R.layout.views, null);
        getResources().getColor(R.color.green_color));
        View view3 = inflater.inflate(R.layout.views, null);
        view3.setBackgroundColor(
        getResources().getColor(R.color.blue_color));
        View view4 = inflater.inflate(R.layout.views, null);
        getResources().getColor(R.color.purple_color));
        View view5 = inflater.inflate(R.layout.views, null);
        view5.setBackgroundColor(
        getResources().getColor(R.color.orange_color));
        View view6 = inflater.inflate(R.layout.views, null);
        view6.setBackgroundColor(
        getResources().getColor(R.color.black_color));
        ArrayList<View> viewList = new ArrayList<View>();
        viewList.add(view1);
        viewList.add(view2);
        viewList.add(view3);
        viewList.add(view4);
        viewList.add(view5);
        viewList.add(view6);
        adapter = new MyViewPagerAdapter(viewList);
        viewpager.setAdapter(adapter);
        viewpager.setOnPageChangeListener(this);
    }
    //第四步:在viewpager的OnpageChangeListener的三个方法中
    //分别添加indicator的对应的三个方法
    @Override
    public void onPageScrollStateChanged(int state) {

        indicator.setOnPageScrollStateChanged(state);

    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        indicator.setOnPageScrolled(position, positionOffset);

    }

    @Override
    public void onPageSelected(int position) {

        indicator.setOnPageSelected(position);

    }

    @Override
    public void TitleClick(View v, int position) {
        //View v是对应的那个title,position是title所在的位置,跟传入位置一致
        viewpager.setCurrentItem(position);
    }

从上面代码中我们可以知道,title部分是按照你传入的titleName个数来自动生成的,所以对应Tab的位置也是按照传入的titleName顺序而定。指示器中点击的每个Tab,也会通过方法TitleClick回调出来,参数View v和int position就是你所点击的那个Tab和它所在的位置。

以上就是通常我们所用到的需求,当然如果还需要在指示器中做一些其他的需求,可以在后续进行修改。

接下来就是两个关键的部分!

2.字体颜色的渐变思路

在效果图中,字体的颜色改变是通过手指滑动的时候进行渐变。当选中的位置时titleOne,然后准备滑动到titleTwo的过程中,titleOne的颜色由白色逐渐加深至黑色,titleTwo的颜色相反变化,很明显,在这动态变换的过程中,肯定有一个动态值来控制颜色的逐渐改变,这个动态值就是在ViewPager的onPageScrolled中的positionOffset这个值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值