转载 :http://blog.youkuaiyun.com/lmj623565791/article/details/41087219
Activity
public class Main2Activity extends FragmentActivity implements ViewPager.OnPageChangeListener,View.OnClickListener{
private ViewPager mViewPager;
private List<Fragment> mTabs = new ArrayList<>();
private FragmentPagerAdapter mAdapter;
private String []mTitles = new String[]{"First Fragemt!","Second Fragment!","Third Fragment","Fourth Fragment"};
private List<ChangeColorIconWithTextView> mTabIndicator = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
initDatas();
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(this);
}
private List<TextView> tList = new ArrayList<>();
private void initDatas() {
for(String title:mTitles){
int i = 1;
Fragment fragment = new BlankFragment();
mTabs.add(fragment);
i++;
}
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return mTabs.get(position);
}
@Override
public int getCount() {
return mTabs.size();
}
};
ChangeColorIconWithTextView one = (ChangeColorIconWithTextView) findViewById(R.id.indicator_one);
ChangeColorIconWithTextView two = (ChangeColorIconWithTextView) findViewById(R.id.indicator_two);
ChangeColorIconWithTextView three = (ChangeColorIconWithTextView) findViewById(R.id.indicator_three);
ChangeColorIconWithTextView four = (ChangeColorIconWithTextView) findViewById(R.id.indicator_four);
mTabIndicator.add(one);
mTabIndicator.add(two);
mTabIndicator.add(three);
mTabIndicator.add(four);
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
four.setOnClickListener(this);
one.setIconAlpha(1.0f);
}
@Override
public void onClick(View v) {
for (int i = 0; i < mTabIndicator.size(); i++)
{
mTabIndicator.get(i).setIconAlpha(0);
}
switch (v.getId())
{
case R.id.indicator_one:
mTabIndicator.get(0).setIconAlpha(1.0f);
mViewPager.setCurrentItem(0, false);
break;
case R.id.indicator_two:
mTabIndicator.get(1).setIconAlpha(1.0f);
mViewPager.setCurrentItem(1, false);
break;
case R.id.indicator_three:
mTabIndicator.get(2).setIconAlpha(1.0f);
mViewPager.setCurrentItem(2, false);
break;
case R.id.indicator_four:
mTabIndicator.get(3).setIconAlpha(1.0f);
mViewPager.setCurrentItem(3, false);
break;
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (positionOffset > 0)
{
ChangeColorIconWithTextView left = mTabIndicator.get(position);
ChangeColorIconWithTextView right = mTabIndicator.get(position + 1);
left.setIconAlpha(1 - positionOffset);
right.setIconAlpha(positionOffset);
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
自定义
public class ChangeColorIconWithTextView extends View {
private Bitmap mBitmap;
private Canvas mCanvas;
private Paint mPaint;
//颜色
private int mColor = 0xff45c01a;
//透明度
private float mAlpha= 0f;
//图标
private Bitmap mIconBitmap;
//限制绘制icon范围
private Rect mIconRect;
//icon 底部文本
private String mText = "微信";
private int mTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, getResources().getDisplayMetrics());
private Paint mTextPaint;
private Rect mTextBound = new Rect();
public ChangeColorIconWithTextView(Context context) {
this(context,null);
}
public ChangeColorIconWithTextView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public ChangeColorIconWithTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.ChangeColorIconText,defStyleAttr,0);
int count = typedArray.getIndexCount();
for (int i = 0; i < count; i++) {
int attr = typedArray.getIndex(i);
switch (attr){
case R.styleable.ChangeColorIconText_colori:
mColor = typedArray.getColor(attr, mColor);
break;
case R.styleable.ChangeColorIconText_iconi:
BitmapDrawable drawable = (BitmapDrawable) typedArray.getDrawable(attr);
mIconBitmap =drawable.getBitmap() ;
break;
case R.styleable.ChangeColorIconText_text:
mText = typedArray.getString(attr);
break;
case R.styleable.ChangeColorIconText_text_size:
mTextSize = (int) typedArray.getDimension(attr, TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,10,getResources().getDisplayMetrics()));
break;
}
}
typedArray.recycle();
mTextPaint = new Paint();
mTextPaint.setTextSize(mTextSize);
mTextPaint.setColor(0xff555555);
//得到text绘制的范围
mTextPaint.getTextBounds(mText,0,mText.length(),mTextBound);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//得到绘制icon的宽
int bitmapWidth = Math.min(getMeasuredWidth() - getPaddingLeft() - getPaddingRight(), getMeasuredHeight() - getPaddingTop() - getPaddingBottom() - mTextBound.height());
int left = getMeasuredWidth()/2 - bitmapWidth /2;
int top = (getMeasuredHeight() - mTextBound.height())/2 - bitmapWidth/2;
//设置icon的绘制范围
mIconRect = new Rect(left, top, left + bitmapWidth, top + bitmapWidth);
}
@Override
protected void onDraw(Canvas canvas) {
int alpha = (int) Math.ceil((255 * mAlpha));
canvas.drawBitmap(mIconBitmap,null,mIconRect,null);
setupTargetBitmap(alpha);
drawSourceText(canvas, alpha);
drawTargetText(canvas, alpha);
canvas.drawBitmap(mBitmap, 0, 0, null);
}
private void drawTargetText(Canvas canvas, int alpha) {
mTextPaint.setColor(mColor);
mTextPaint.setAlpha(alpha);
canvas.drawText(mText, mIconRect.left + mIconRect.width() / 2-mTextBound.width()/2, mIconRect.bottom + mTextBound.height(), mTextPaint);
}
private void drawSourceText(Canvas canvas, int alpha) {
mTextPaint.setTextSize(mTextSize);
mTextPaint.setColor(0xff333333);
mTextPaint.setAlpha(255 - alpha);
canvas.drawText(mText, mIconRect.left + mIconRect.width() / 2 -mTextBound.width()/2, mIconRect.bottom + mTextBound.height(), mTextPaint);
}
private void setupTargetBitmap(int alpha) {
mBitmap = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPaint = new Paint();
mPaint.setColor(mColor);
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setAlpha(alpha);
mCanvas.drawRect(mIconRect, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mPaint.setAlpha(255);
mCanvas.drawBitmap(mIconBitmap, null, mIconRect, mPaint);
}
public void setIconAlpha(float alpha){
this.mAlpha = alpha;
invalidateView();
}
private void invalidateView(){
if(Looper.getMainLooper() == Looper.myLooper()){
invalidate();
}else{
postInvalidate();
}
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:xxl="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.example.administrator.testapplication.Main2Activity">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
></android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#22aaff77"
android:orientation="horizontal"
>
<com.example.administrator.testapplication.ChangeColorIconWithTextView
android:id="@+id/indicator_one"
android:layout_width="0dp"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_weight="1"
xxl:iconi="@mipmap/ic_menu_start_conversation"
xxl:text="消息"
xxl:text_size="12sp"
>
</com.example.administrator.testapplication.ChangeColorIconWithTextView>
<com.example.administrator.testapplication.ChangeColorIconWithTextView
android:id="@+id/indicator_two"
android:layout_width="0dp"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_weight="1"
xxl:iconi="@mipmap/ic_menu_friendslist"
xxl:text="朋友"
xxl:text_size="12sp"
>
</com.example.administrator.testapplication.ChangeColorIconWithTextView>
<com.example.administrator.testapplication.ChangeColorIconWithTextView
android:id="@+id/indicator_three"
android:layout_width="0dp"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_weight="1"
xxl:iconi="@mipmap/ic_menu_emoticons"
xxl:text="发现"
xxl:text_size="12sp"
>
</com.example.administrator.testapplication.ChangeColorIconWithTextView>
<com.example.administrator.testapplication.ChangeColorIconWithTextView
android:id="@+id/indicator_four"
android:layout_width="0dp"
android:layout_height="match_parent"
android:padding="5dp"
android:layout_weight="1"
xxl:iconi="@mipmap/ic_menu_allfriends"
xxl:text="全部"
xxl:text_size="12sp"
>
</com.example.administrator.testapplication.ChangeColorIconWithTextView>
</LinearLayout>
</LinearLayout>
fragment
public class BlankFragment extends Fragment {
private String mTitle = "Default";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_blank, container, false);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onDetach() {
super.onDetach();
}
}