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; } }以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。