在Android開發(fā)中,經常會有viewpager滑動指示器的功能,比較常用的:
- Android原生的 TabLayout
- JakeWharton大神的 ViewPagerIndicator
上面兩種,用法自行Google,都比較簡單。但是,如果設計給的指示器是一個自己設計的圖或者其他的?又或者,確實不想因為一個頁面而進入一個第三方庫?那么,我們就需要自己去寫一個指示器了。
今天重點:
怎么自定義一個任何樣式的指示器呢?
- 首先,其實要明白指示器與viewpager聯(lián)動的關聯(lián)在哪里
- 其次,就是定義我們的指示器(我下面展示的是指示器與所指示的內容徹底分離,當然可以放在一起,但重點是講指示器~)
那么,就開始吧。
聯(lián)動的關系
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) indicator.getLayoutParams();
float left = i * viewWidth + viewWidth / 2 - indicator.getMeasuredWidth() / 2 + v * viewWidth;
params.leftMargin = (int) left;
indicator.setLayoutParams(params);
if (mListener != null) {
mListener.onPageScrolled(i, v, i1);
}
}
@Override
public void onPageSelected(int i) {
if (mListener != null) {
mListener.onPageSelected(i);
}
}
@Override
public void onPageScrollStateChanged(int i) {
if (mListener != null) {
mListener.onPageScrollStateChanged(i);
}
}
});
- 重點就是onPageScrolled這個回調,三個參數
- position (i) 當前頁面,你點擊滑動的頁面
- offset (v) 當前頁面偏移的百分比
- offsetPixels (i1) 當前頁面偏移的像素位置
- indicator 是我的指示器view(ImageView)
- viewWidth 是指示器所指示的內容的寬度
- 通過設置leftMargin,來動態(tài)改變indicator的位置
使用上述方式,其實就是將你的指示器view與viewpager滑動關聯(lián),即滑動viewpager時,指示器隨著滑動的偏移量移動位置
還有一種方式,是在onPageScrolled里增加view的滑動動畫,但是這樣就無法隨著viewpager偏移去偏移了。
float left = i * viewWidth + viewWidth / 2 - indicator.getMeasuredWidth() / 2 + v * viewWidth;
indicator.animate().translationX(left).setDuration(200).start();
到此,你的indicator就可以隨便滑動了,隨便你設置什么圖片
實現上述的indicator,其實就這么簡單~