国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

android實(shí)現(xiàn)ViewPager的Indicator的實(shí)例代碼

2019-10-23 19:48:57
字體:
供稿:網(wǎng)友

雖然在android5.0中design中有了TabLayout來實(shí)現(xiàn)ViewPager的Indicator,簡(jiǎn)單好用。但這個(gè)是我自己實(shí)現(xiàn)的,學(xué)習(xí)了很多,記錄在這里。效果圖:

viewpager,indicator,viewpagerindicator,viewpager和indicator

第一步

新建一個(gè)類繼承LinearLayout,用來繪制指示器,及提供Viewpager滑動(dòng)時(shí)重繪指示器的方法:

public class ViewPagerIndicator extends LinearLayout{  //畫筆  private Paint mPaint;   //用來畫一條線  private Path mPath;  //繪制線的寬度  private int mLineWidth;  //線的初始位置  private int mInitTranslationX;  //移動(dòng)位置  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中獲取寬和初始位置,并根據(jù)位置初始化線  @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();    //移動(dòng)到該坐標(biāo)后開始繪制    canvas.translate(mInitTranslationX + mTranslationX,getHeight());    canvas.drawPath(mPath,mPaint);    canvas.restore();    super.dispatchDraw(canvas);  }  ////在viewpager的onPageScrolled監(jiān)聽方法中調(diào)用此方法。viewPager滑動(dòng)時(shí)mTranslationX的距離跟著變化,實(shí)現(xiàn)線的滑動(dòng),position,offset由onPageScrolled傳值  public void scroll(int position ,float offset){    int tabWidth = getWidth()/getChildCount();    mTranslationX =(int) (tabWidth * offset +tabWidth * position);    //請(qǐng)求重繪,調(diào)用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的關(guān)聯(lián)

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;  //當(dāng)前選中的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);      //設(shè)置viewpager的適配器;      orderPickingAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {        @Override        public int getCount() {          return mFragmentList.size();        }        @Override        public Fragment getItem(int i) {          return mFragmentList.get(i);        }      };      //設(shè)置ViewPager監(jiān)聽事件      onPageChangeListener = new ViewPager.OnPageChangeListener(){        //滑動(dòng)時(shí),indicator下面的橫線跟著滑動(dòng)        @Override        public void onPageScrolled(int i, float v, int i1) {          mIndicator.scroll(i, v);        }        //選中監(jiān)聽,改變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;  }}

這就完成了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 三江| 淮滨县| 大同县| 榕江县| 铁岭市| 迁安市| 石门县| 中牟县| 郑州市| 西峡县| 信宜市| 岳阳县| 离岛区| 云浮市| 高青县| 桂林市| 云阳县| 尚义县| 阜城县| 佛坪县| 乐都县| 乌拉特前旗| 瓮安县| 犍为县| 方正县| 闵行区| 新余市| 弋阳县| 丰镇市| 古浪县| 涟水县| 汶川县| 来安县| 临洮县| 陆川县| 昌都县| 资源县| 枞阳县| 麻栗坡县| 潞西市| 桐梓县|