Android仿微信底部按钮滑动变色
Android仿微信底部按钮滑动变色,这里只针对使用Fragment为Tab页的滑动操作,进行简单的变色讲解。
首先说下OnPageChangeListener这个监听
//这个监听有三个方法 publicabstractvoidonPageScrollStateChanged(intstate) publicabstractvoidonPageScrolled(intposition,floatpositionOffset,intpositionOffsetPixels) publicabstractvoidonPageSelected(intposition) //第一个方法onPageScrollStateChanged中的参数state,有三个可取的值 publicstaticfinalintSCROLL_STATE_DRAGGING ConstantValue:1(0x00000001)//手指按在ViewPager上滑动时 publicstaticfinalintSCROLL_STATE_IDLE ConstantValue:0(0x00000000)//手指松开后,ViewPager自动滑动期间 publicstaticfinalintSCROLL_STATE_SETTLING ConstantValue:2(0x00000002)//ViewPager进入了某个Page //如果在onPageScrollStateChanged中输出state的值,你会发现每次都是按顺序打印出“1---2---0” //第二个方法onPageScrolled的三个参数 position://滑动时,屏幕左侧显示的第一个page positionOffset://滑动比例,值的范围为[0,1),手指往左滑动,该值递增,反之递减 positionOffsetPixels://滑动距离,和屏幕有关,手指往左滑动,该值递增,反之递减 //我们经常需要检查viewpager的滑动方向并作出一些操作,这时你只需要通过position和positionOffset两个值即可实现该功能。 //比如实现微信底部图标颜色渐变向左滑动时 ChangeColorIconWithTextViewleft=mTabIndicator.get(position);//左侧显示的第一个page页面上底部图标和文字的初始化 ChangeColorIconWithTextViewright=mTabIndicator.get(position+1);//右侧显示的Page底部图标和文字的初始化 left.setIconAlpha(1-positionOffset);//设置图标的透明度此时positionOffset值递增左侧图标的颜色变浅 right.setIconAlpha(positionOffset);//右侧图标的颜色逐渐变深 //第三个方法onPageSelected的三个参数 position://当前选择的page序号 //该方法被调用的时间比较特别,在上面的第一个方法中的“1---2----0”中的2执行之后,onPageSelected就执行,然后执行“1---2----0”中的0。就是手指松开屏幕之后,onPageSelected被执行。
上面提到了ChangeColorIconWithTextView主要类
packagecom.mhealth.nursestation.app.pda.business.login.base.ui.fragmentutil;
importandroid.content.Context;
importandroid.content.res.TypedArray;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.BitmapFactory;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.PorterDuff;
importandroid.graphics.PorterDuffXfermode;
importandroid.graphics.Rect;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.os.Bundle;
importandroid.os.Looper;
importandroid.os.Parcelable;
importandroid.util.AttributeSet;
importandroid.util.TypedValue;
importandroid.view.View;
importcom.mhealth.nursestation.app.pda.R;
/**
*此类用于修改颜色渐变
*/
publicclassChangeColorIconWithTextViewextendsView{
privateBitmapmBitmap;
privateCanvasmCanvas;
privatePaintmPaint;
/**
*颜色
*/
privateintmColor=0XFF07B7C4;
/**
*透明度0.0-1.0初始化必须是0不是0就废了
*/
privatefloatmAlpha=0f;
/**
*图标
*/
privateBitmapmIconBitmap;
/**
*限制绘制icon的范围
*/
privateRectmIconRect;
/**
*icon底部文本
*/
privateStringmText="微信";
privateintmTextSize=(int)TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_SP,10,getResources().getDisplayMetrics());
privatePaintmTextPaint;
privateRectmTextBound=newRect();
publicChangeColorIconWithTextView(Contextcontext){
super(context);
}
/**
*初始化自定义属性值
*
*@paramcontext
*@paramattrs
*/
publicChangeColorIconWithTextView(Contextcontext,AttributeSetattrs){
super(context,attrs);
//获取设置的图标
TypedArraya=context.obtainStyledAttributes(attrs,
R.styleable.ChangeColorIconView);
intn=a.getIndexCount();
for(inti=0;i
在Activity里面实现监听操作
@Override
publicvoidonPageScrolled(intposition,floatpositionOffset,intpositionOffsetPixels){
if(positionOffset>0){
ChangeColorIconWithTextViewleft=mTabIndicator.get(position);
ChangeColorIconWithTextViewright=mTabIndicator.get(position+1);
left.setIconAlpha(1-positionOffset);
right.setIconAlpha(positionOffset);
}
}
定义一个集合,将所有变色控件装载进去
privateListmTabIndicator=newArrayList();
privatevoidinitTabIndicator(){
ChangeColorIconWithTextViewone=(ChangeColorIconWithTextView)findViewById(R.id.id_indicator_one);
ChangeColorIconWithTextViewtwo=(ChangeColorIconWithTextView)findViewById(R.id.id_indicator_two);
ChangeColorIconWithTextViewthree=(ChangeColorIconWithTextView)findViewById(R.id.id_indicator_three);
ChangeColorIconWithTextViewfour=(ChangeColorIconWithTextView)findViewById(R.id.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
publicvoidonClick(Viewv){
resetOtherTabs();
switch(v.getId()){
caseR.id.id_indicator_one:
mTabIndicator.get(0).setIconAlpha(1.0f);
mViewPager.setCurrentItem(0,false);
break;
caseR.id.id_indicator_two:
mTabIndicator.get(1).setIconAlpha(1.0f);
mViewPager.setCurrentItem(1,false);
break;
caseR.id.id_indicator_three:
mTabIndicator.get(2).setIconAlpha(1.0f);
mViewPager.setCurrentItem(2,false);
mAppContext.has_new_talk=false;
break;
caseR.id.id_indicator_four:
mTabIndicator.get(3).setIconAlpha(1.0f);
mViewPager.setCurrentItem(3,false);
break;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。