Android 自定义的颜色滑动转换ViewPager指示器 ColorTransformIndicator

本文参考:http://blog.csdn.net/lmj623565791/article/details/44098729


先来看看效果图

       


一 使用

1 布局 


   添加一个自定义控件

<span style="font-family: Arial, Helvetica, sans-serif;"><?xml version="1.0" encoding="utf-8"?></span>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.rios.indicator.indicatior.indicator.Indicator
        android:id="@+id/indicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>

</LinearLayout>

添加一个背景用的shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners android:radius="5dp"/>
	<solid android:color="#5000"/>
</shape>


2 代码调用

mIndicator = (Indicator) findViewById(R.id.indicator);
ViewPager = (ViewPager) findViewById(R.id.viewpager);


private String[] mTitles = {"同城", "笑话", "图片","天气","电影","音乐","机票","彩票","游戏","小说",
			"股票","理财","新闻","军事","社会","娱乐"};
private void setIndicator() {
		//移动方块背景颜色更改 shape_indicator.xml
		mIndicator.setViewPager(mViewPager);
		mIndicator.setTitleString(mTitles);//mTitles的大小要和mViewPager的大小一致
//		mIndicator.setColorTextBack(Color.BLACK);//设置字体背景颜色
//		mIndicator.setColorTextCurrent(0xFFF0FFFF);//设置字体选择时的颜色
//		mIndicator.setBackgroundColor(0xFFFF6A6A);//设置背景颜色
//		mIndicator.setTitleTextSize(20);//设置字体大小
		mIndicator.setParams();//使以上参数生效
		mIndicator.setOnClickItemListener(new Indicator.OnClickItemListener() {
			@Override
			public void OnItemClick(View childView, int position) {
				Toast.makeText(IndicatorActivity.this,"你点击的是:"+position+"  "+
						((TextView)childView).getText().toString(),Toast.LENGTH_SHORT).show();
			}
		});
		mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			@Override
			public void onPageSelected(int position) {
			}
			@Override
			public void onPageScrolled(int position, float positionOffset,
									   int positionOffsetPixels) {
//--------------设置颜色切换位置
				mIndicator.setPosition(position, positionOffset);
			}
			@Override
			public void onPageScrollStateChanged(int state) {

			}
		});
	}


很简单吧


二 原理

 字体颜色转换原理是绘了二次字体 ,第一次全绘,第二次绘需要的范围,那绘范围怎么绘呢,其实有个方法能实现 就是 

canvas.clipRect  只能在矩形区域里绘制

mPaint.setColor(mColorTextBack);
//第一次全绘
canvas.drawText(mAttrText, 0, mHeight, mPaint);
mPaint.setColor(mColorTextCurrent);
//限制范围
canvas.clipRect(mRect);
//第二次绘
canvas.drawText(mAttrText, 0, mHeight, mPaint);


三 源码下载
https://github.com/rios168/ColorTransformIndicator
如果好用 记得点击 star 支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值