android实现ViewPager的Indicator的实例代码

android实现ViewPager的Indicator的实例代码,第1张

概述虽然在android5.0中design中有了TabLayout来实现ViewPager的Indicator,简单好用。但这个是我自己实现的,学习了很多,记录在这里。效果图:

虽然在androID5.0中design中有了TabLayout来实现VIEwPager的Indicator,简单好用。但这个是我自己实现的,学习了很多,记录在这里。效果图:

第一步

新建一个类继承linearLayout,用来绘制指示器,及提供VIEwpager滑动时重绘指示器的方法:

public class VIEwPagerIndicator extends linearLayout{  //画笔  private Paint mPaint;   //用来画一条线  private Path mPath;  //绘制线的宽度  private int mlinewidth;  //线的初始位置  private int mInitTranslationX;  //移动位置  private int mTranslationX;  //子控件  private VIEw mChildVIEw;  public VIEwPagerIndicator(Context context) {    super(context,null);  }  public VIEwPagerIndicator(Context context,AttributeSet attrs) {    super(context,attrs);    mPaint = new Paint();    mPaint.setAntiAlias(true);    mPaint.setcolor(color.parsecolor("#ffba00"));    mPaint.setstrokeWIDth(3);    mPaint.setStyle(Paint.Style.stroke);  }  //完成布局后获取子控件  @OverrIDe  protected voID onFinishInflate() {    super.onFinishInflate();    mChildVIEw = getChildAt(0);  }//在onSizeChanged中获取宽和初始位置,并根据位置初始化线  @OverrIDe  protected voID onSizeChanged(int w,int h,int olDW,int oldh) {    super.onSizeChanged(w,h,olDW,oldh);    mTranslationX = 0;    mlinewidth = mChildVIEw.getMeasureDWIDth();    mInitTranslationX = (w/getChildCount()-mlinewidth)/2;    initline();  }//初始化线  private voID initline(){    mPath = new Path();    mPath.moveto(0,0);    mPath.lineto(mlinewidth,0);  }//绘制线  @OverrIDe  protected voID dispatchDraw(Canvas canvas) {    canvas.save();    //移动到该坐标后开始绘制    canvas.translate(mInitTranslationX + mTranslationX,getHeight());    canvas.drawPath(mPath,mPaint);    canvas.restore();    super.dispatchDraw(canvas);  }  ////在vIEwpager的onPageScrolled监听方法中调用此方法。vIEwPager滑动时mTranslationX的距离跟着变化,实现线的滑动,position,offset由onPageScrolled传值  public voID scroll(int position,float offset){    int tabWIDth = getWIDth()/getChildCount();    mTranslationX =(int) (tabWIDth * offset +tabWIDth * position);    //请求重绘,调用dispatchDraw方法    invalIDate();  }}

第二步

在布局中使用该类:

layout\orderpicking

<com.hlw.stock.customlayout.VIEwPagerIndicator  androID:ID="@+ID/indicator"  androID:layout_wIDth="match_parent"  androID:layout_height="@dimen/xhdpi_40"  androID:gravity="center"  androID:background="@color/white"  androID:orIEntation="horizontal">  <TextVIEw  androID:ID="@+ID/for_picking"  androID:layout_wIDth="@dimen/xhdpi_60"  androID:layout_height="match_parent"  androID:layout_marginRight="@dimen/xhdpi_60"  androID:clickable="true"  androID:gravity="center"  androID:onClick="onClick"  androID:text="待拣货"  androID:textcolor="@color/light_black"  androID:textSize="@dimen/xhdpi_14" />  <TextVIEw  androID:ID="@+ID/has_been_picking"  androID:layout_wIDth="@dimen/xhdpi_60"  androID:layout_height="match_parent"  androID:layout_marginRight="@dimen/xhdpi_60"  androID:clickable="true"  androID:gravity="center"  androID:onClick="onClick"  androID:text="已拣货"  androID:textcolor="@color/light_black"  androID:textSize="@dimen/xhdpi_14"  />  <TextVIEw  androID:ID="@+ID/all"  androID:layout_wIDth="@dimen/xhdpi_60"  androID:layout_height="match_parent"  androID:clickable="true"  androID:gravity="center"  androID:onClick="onClick"  androID:text="全部"  androID:textcolor="@color/light_black"  androID:textSize="@dimen/xhdpi_14" />  </com.hlw.stock.customlayout.VIEwPagerIndicator>  <androID.support.v4.vIEw.VIEwPager    androID:ID="@+ID/orderpicking_date"    androID:layout_wIDth="match_parent"    androID:layout_height="0dp"    androID:layout_weight="1"    androID:background="@color/white"></androID.support.v4.vIEw.VIEwPager>

第三步

在activity中完成VIEwPagerIndicator与VIEwpager的关联

public class OrderPickingActivity extends FragmentActivity implements VIEw.OnClickListener {  TextVIEw forPicking;  TextVIEw hasBeenPicking;  TextVIEw hasBeenPicking;  VIEwPagerIndicator mIndicator;  VIEwPager orderPickingDate;  private List<Fragment> mFragmentList;  private FragmentPagerAdapter orderPickingAdapter;  private VIEwPager.OnPagechangelistener onPagechangelistener;  //当前选中的indicator  private TextVIEw currentItem;   protected voID onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       requestwindowFeature(Window.FEATURE_NO_Title);       setContentVIEw(R.layout.orderpicking);     init();     orderPickingDate.setAdapter(orderPickingAdapter);     orderPickingDate.addOnPagechangelistener();     orderPickingDate.setCurrentItem(0);       currentItem = forPicking;         currentItem.setTextcolor(color.parsecolor("#ffba00"));  }  private voID init(){    forPicking = (TextVIEw) findVIEwByID(R.ID.for_picking);    hasBeenPicking = (TextVIEw) findVIEwByID(R.ID.has_been_picking);    all = (TextVIEw) findVIEwByID(R.ID.all);    mIndicator=(VIEwPagerIndicator)findVIEwByID(R.ID.indicator);    orderPickingDate = (VIEwPager)findVIEwByID(R.ID.orderpicking_date);    //初始化vIEwpager的item,并添加到List中      mFragmentList = new ArrayList<>();      OrderPickingFragmentForPicking orderPickingFragmentForPicking =       new OrderPickingFragmentForPicking();      OrderPickingFragmentHasBeenPicking orderPickingFragmentHasBeenPicking =        new OrderPickingFragmentHasBeenPicking();      OrderPickingFragmentAll orderPickingFragmentAll =        new OrderPickingFragmentAll();      mFragmentList.add(orderPickingFragmentForPicking);      mFragmentList.add(orderPickingFragmentHasBeenPicking);      mFragmentList.add(orderPickingFragmentAll);      //设置vIEwpager的适配器;      orderPickingAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {        @OverrIDe        public int getCount() {          return mFragmentList.size();        }        @OverrIDe        public Fragment getItem(int i) {          return mFragmentList.get(i);        }      };      //设置VIEwPager监听事件      onPagechangelistener = new VIEwPager.OnPagechangelistener(){        //滑动时,indicator下面的横线跟着滑动        @OverrIDe        public voID onPageScrolled(int i,float v,int i1) {          mIndicator.scroll(i,v);        }        //选中监听,改变indicator文字颜色        @OverrIDe        public voID onPageSelected(int i) {          switch (i) {            case 0:              if (currentItem == forPicking)                return;              forPicking.setTextcolor(color.parsecolor("#ffba00"));              currentItem.setTextcolor(color.parsecolor("#646464"));              currentItem = forPicking;              break;            case 1:              if (currentItem == hasBeenPicking)                return;              hasBeenPicking.setTextcolor(color.parsecolor("#ffba00"));              currentItem.setTextcolor(color.parsecolor("#646464"));              currentItem = hasBeenPicking;              break;            case 2:              if (currentItem == all)                return;              all.setTextcolor(color.parsecolor("#ffba00"));              currentItem.setTextcolor(color.parsecolor("#646464"));              currentItem = all;          }        }        @OverrIDe        public voID onPageScrollStateChanged(int i) {}      });  }  @OverrIDe  public voID onClick(VIEw v) {        switch (v.getID()) {        case R.ID.for_picking:          orderPickingDate.setCurrentItem(0);          break;        case R.ID.has_been_picking:          orderPickingDate.setCurrentItem(1);          break;        case R.ID.all:          orderPickingDate.setCurrentItem(2);          break;        default:          break;  }}

这就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的android实现ViewPager的Indicator的实例代码全部内容,希望文章能够帮你解决android实现ViewPager的Indicator的实例代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1147053.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存