Skip to content

Commit

Permalink
2.5.2 release (#53)
Browse files Browse the repository at this point in the history
* Add ROUND_RECT Indicator Style.

* Fix bug #48

* Fix bug
  • Loading branch information
zhpanvip authored Dec 1, 2019
1 parent 8b2a868 commit 6e6e768
Show file tree
Hide file tree
Showing 14 changed files with 142 additions and 69 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# BannerViewPager

[![License](https://img.shields.io/badge/License%20-Apache%202-337ab7.svg)](https://www.apache.org/licenses/LICENSE-2.0)
[![MinSdk](https://img.shields.io/badge/API-16%2B-brightgreen.svg?style=flat)
![MinSdk](https://img.shields.io/badge/API-16%2B-brightgreen.svg?style=flat)
[![JitPack](https://jitpack.io/v/zhpanvip/BannerViewPager.svg)](https://jitpack.io/#zhpanvip/BannerViewPager)
[ ![JCenter](https://api.bintray.com/packages/zhpanvip/CircleViewPager/bannerview/images/download.svg) ](https://bintray.com/zhpanvip/CircleViewPager/bannerview/_latestVersion)
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-BannerViewPager-brightgreen.svg?style=flat)](https://android-arsenal.com/details/1/7961)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ class AdapterFragmentPager(fm: FragmentManager) : FragmentPagerAdapter(fm) {

override fun instantiateItem(container: ViewGroup, position: Int): Any {
val fragment = super.instantiateItem(container, position) as Fragment
fragmentList!!.put(position, fragment as BaseFragment)
fragmentList?.put(position, fragment as BaseFragment)
return fragment
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import android.view.ViewGroup

import androidx.annotation.ColorInt
import androidx.annotation.ColorRes
import androidx.core.content.ContextCompat

import com.trello.rxlifecycle2.components.support.RxFragment

Expand Down Expand Up @@ -50,7 +51,7 @@ abstract class BaseFragment : RxFragment() {

@ColorInt
protected fun getColor(@ColorRes colorRes: Int): Int {
return context!!.resources.getColor(colorRes)
return ContextCompat.getColor(context!!,colorRes)
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,18 +109,19 @@ private void initBanner() {
mBannerViewPager
.setAutoPlay(true)
.setInterval(5000)
.setRevealWidth(BannerUtils.dp2px(10))
.setScrollDuration(1200)
// .setRevealWidth(BannerUtils.dp2px(10))
.setPageMargin(BannerUtils.dp2px(10))
.setPageStyle(PageStyle.MULTI_PAGE_OVERLAP)
.setPageStyle(PageStyle.MULTI_PAGE)
.setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
.setHolderCreator(NetViewHolder::new)
.setIndicatorMargin(0,0,0, (int) getResources().getDimension(R.dimen.dp_18))
.setOnPageClickListener(position -> {
BannerData bannerData = mBannerViewPager.getList().get(position);
Toast.makeText(getMContext(),
"点击了position:" + position + " " + bannerData.getTitle(), Toast.LENGTH_SHORT).show();
.setIndicatorMargin(0, 0, 0, (int) getResources().getDimension(R.dimen.dp_18))
.setOnPageClickListener(this::onPageClicked);
}

});
private void onPageClicked(int position) {
BannerData bannerData = mBannerViewPager.getList().get(position);
Toast.makeText(getMContext(), "position:" + position + " " + bannerData.getTitle(), Toast.LENGTH_SHORT).show();
}

private View getHeaderView() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ protected void initView(Bundle savedInstanceState, View view) {
view.findViewById(R.id.btn_refresh).setOnClickListener(v -> updateData());
mViewPager.setIndicatorGap(BannerUtils.dp2px(6))
.setRoundCorner(BannerUtils.dp2px(6))
.setOnPageClickListener(position -> ToastUtils.show("Position:" + position))
.setIndicatorColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
.setHolderCreator(() -> new ImageResourceViewHolder(0));
initRadioGroup();
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/fragment_others.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
android:layout_below="@id/indicator_view"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:text="@string/text_indicator_style"
android:text="@string/custom_style"
android:textColor="#000000"
android:textSize="18sp"
android:textStyle="bold" />
Expand Down
6 changes: 2 additions & 4 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@
<string name="tab1">Home</string>
<string name="tab2">Page</string>
<string name="tab3">Indicator</string>
<string name="tab4">Others</string>
<string name="text_page_style">Page Style:</string>
<string name="text_indicator_style">Indicator Style:</string>

<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="tab4">Others</string>
<string name="custom_style">Custom Style</string>
</resources>
120 changes: 76 additions & 44 deletions bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@
import com.zhpan.bannerview.transform.PageTransformerFactory;
import com.zhpan.bannerview.view.CatchViewPager;

import java.util.ArrayList;
import java.util.List;

import static com.zhpan.bannerview.adapter.BannerPagerAdapter.MAX_VALUE;
Expand Down Expand Up @@ -66,8 +65,6 @@ public class BannerViewPager<T, VH extends ViewHolder> extends RelativeLayout im

private CatchViewPager mViewPager;

private List<T> mList;

private BannerManager mBannerManager;

private HolderCreator<VH> holderCreator;
Expand Down Expand Up @@ -99,7 +96,6 @@ private void initView() {
inflate(getContext(), R.layout.layout_banner_view_pager, this);
mViewPager = findViewById(R.id.vp_main);
mIndicatorLayout = findViewById(R.id.rl_indicator);
mList = new ArrayList<>();
}

@Override
Expand Down Expand Up @@ -138,11 +134,12 @@ private void setTouchListener() {
@Override
public void onPageSelected(int position) {
// Optimized For Issue #42
if (mList.size() > 0 && isCanLoop() && position == 0) {
position = MAX_VALUE / 2 - ((MAX_VALUE / 2) % mList.size()) + 1;
setCurrentItem(BannerUtils.getRealPosition(isCanLoop(), position, mList.size()));
int size = mBannerPagerAdapter.getListSize();
if (size > 0 && isCanLoop() && position == 0) {
position = MAX_VALUE / 2 - ((MAX_VALUE / 2) % size) + 1;
setCurrentItem(0, false);
}
currentPosition = BannerUtils.getRealPosition(isCanLoop(), position, mList.size());
currentPosition = BannerUtils.getRealPosition(isCanLoop(), position, size);
if (mOnPageChangeListener != null)
mOnPageChangeListener.onPageSelected(currentPosition);
if (mIndicatorView != null) {
Expand All @@ -162,17 +159,20 @@ public void onPageScrollStateChanged(int state) {

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (mOnPageChangeListener != null) {
mOnPageChangeListener.onPageScrolled(BannerUtils.getRealPosition(isCanLoop(), position, mList.size()),
positionOffset, positionOffsetPixels);
int listSize = mBannerPagerAdapter.getListSize();
if (listSize > 0) {
if (mOnPageChangeListener != null) {
mOnPageChangeListener.onPageScrolled(BannerUtils.getRealPosition(isCanLoop(), position, listSize),
positionOffset, positionOffsetPixels);
}
if (mIndicatorView != null)
mIndicatorView.onPageScrolled(BannerUtils.getRealPosition(isCanLoop(), position, listSize),
positionOffset, positionOffsetPixels);
}
if (mIndicatorView != null)
mIndicatorView.onPageScrolled(BannerUtils.getRealPosition(isCanLoop(), position, mList.size()),
positionOffset, positionOffsetPixels);
}

private void handlePosition() {
if (mList.size() > 1) {
if (mBannerPagerAdapter.getListSize() > 1) {
currentPosition = mViewPager.getCurrentItem() + 1;
mViewPager.setCurrentItem(currentPosition);
mHandler.postDelayed(mRunnable, getInterval());
Expand All @@ -181,34 +181,34 @@ private void handlePosition() {

private void initBannerData(List<T> list) {
if (list != null) {
initList(list);
setupViewPager();
setIndicatorValues(list);
setupViewPager(list);
initRoundCorner();
}
}

private void initList(List<T> list) {
mList.clear();
mList.addAll(list);
if (mList.size() > 1) {
setIndicatorValues();
} else if (mIndicatorView != null) {
mIndicatorView.setPageSize(mList.size());
}
if (mList.size() > 0 && isCanLoop()) {
currentPosition = MAX_VALUE / 2 - ((MAX_VALUE / 2) % mList.size()) + 1;
}
}

private void setIndicatorValues() {
// private void initList(List<T> list) {
// mList.clear();
// mList.addAll(list);
// mIndicatorView.setPageSize(mList.size());
// if (mList.size() > 1) {
// setIndicatorValues();
// } else if (mIndicatorView != null) {
// mIndicatorView.setPageSize(mList.size());
// }
// setIndicatorValues(list);
//
// }

private void setIndicatorValues(List<T> list) {
BannerOptions bannerOptions = mBannerManager.bannerOptions();
if (isCustomIndicator && null != mIndicatorView) {
initIndicator(mIndicatorView);
} else {
initIndicator(new IndicatorView(getContext()));
}
mIndicatorView.setIndicatorOptions(bannerOptions.getIndicatorOptions());
mIndicatorView.setPageSize(mList.size());
mIndicatorView.setPageSize(list.size());
}

private void initIndicator(IIndicator indicatorView) {
Expand Down Expand Up @@ -258,10 +258,13 @@ private void initRoundCorner() {
}
}

private void setupViewPager() {
private void setupViewPager(List<T> list) {
if (holderCreator != null) {
if (list.size() > 0 && isCanLoop()) {
currentPosition = MAX_VALUE / 2 - ((MAX_VALUE / 2) % list.size()) + 1;
}
removeAllViews();
mViewPager.setAdapter(getPagerAdapter());
mViewPager.setAdapter(getPagerAdapter(list));
mViewPager.setCurrentItem(currentPosition);
mViewPager.removeOnPageChangeListener(this);
mViewPager.addOnPageChangeListener(this);
Expand All @@ -279,16 +282,18 @@ private void setupViewPager() {
}
}

private PagerAdapter getPagerAdapter() {
BannerPagerAdapter<T, VH> bannerPagerAdapter =
new BannerPagerAdapter<>(mList, holderCreator);
bannerPagerAdapter.setCanLoop(isCanLoop());
bannerPagerAdapter.setPageClickListener(position -> {
private BannerPagerAdapter<T, VH> mBannerPagerAdapter;

private PagerAdapter getPagerAdapter(List<T> list) {
mBannerPagerAdapter =
new BannerPagerAdapter<>(list, holderCreator);
mBannerPagerAdapter.setCanLoop(isCanLoop());
mBannerPagerAdapter.setPageClickListener(position -> {
if (mOnPageClickListener != null) {
mOnPageClickListener.onPageClick(position);
}
});
return bannerPagerAdapter;
return mBannerPagerAdapter;
}

private void initPageStyle() {
Expand Down Expand Up @@ -341,14 +346,15 @@ private boolean isCanLoop() {
* @return BannerViewPager数据集合
*/
public List<T> getList() {
return mList;
return mBannerPagerAdapter.getList();
}

/**
* 开启轮播
*/
public void startLoop() {
if (!isLooping() && isAutoPlay() && mList.size() > 1) {
if (!isLooping() && isAutoPlay() && mBannerPagerAdapter != null &&
mBannerPagerAdapter.getListSize() > 1) {
mHandler.postDelayed(mRunnable, getInterval());
setLooping(true);
}
Expand Down Expand Up @@ -608,6 +614,18 @@ public void create(List<T> list) {
initBannerData(list);
}

// public void update(List<T> list) {
// if (null != list) {
// if (mBannerPagerAdapter != null && mBannerManager.bannerOptions().getPageStyle() == PageStyle.NORMAL) {
// mBannerPagerAdapter.setList(list);
// mIndicatorView.setPageSize(list.size());
//// setCurrentItem(0, false);
// } else {
// initBannerData(list);
// }
// }
// }

/**
* @return the currently selected page position.
*/
Expand All @@ -623,7 +641,14 @@ public int getCurrentItem() {
* @param item Item index to select
*/
public void setCurrentItem(int item) {
mViewPager.setCurrentItem(isCanLoop() ? MAX_VALUE / 2 - ((MAX_VALUE / 2) % mList.size()) + 1 + item : item);
if (isCanLoop() && mBannerPagerAdapter.getListSize() > 1) {
removeAllViews();
mViewPager.setCurrentItem(MAX_VALUE / 2 - ((MAX_VALUE / 2) % mBannerPagerAdapter.getListSize()) + 1 + item);
addView(mViewPager);
addView(mIndicatorLayout);
} else {
mViewPager.setCurrentItem(item);
}
}

/**
Expand All @@ -633,7 +658,14 @@ public void setCurrentItem(int item) {
* @param smoothScroll True to smoothly scroll to the new item, false to transition immediately
*/
public void setCurrentItem(int item, boolean smoothScroll) {
mViewPager.setCurrentItem(isCanLoop() ? MAX_VALUE / 2 - ((MAX_VALUE / 2) % mList.size()) + 1 + item : item, smoothScroll);
if (isCanLoop() && mBannerPagerAdapter.getListSize() > 1) {
removeAllViews();
mViewPager.setCurrentItem(MAX_VALUE / 2 - ((MAX_VALUE / 2) % mBannerPagerAdapter.getListSize()) + 1 + item, smoothScroll);
addView(mViewPager);
addView(mIndicatorLayout);
} else {
mViewPager.setCurrentItem(item, smoothScroll);
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ public class BannerPagerAdapter<T, VH extends ViewHolder> extends PagerAdapter {
public static final int MAX_VALUE = Integer.MAX_VALUE;

public BannerPagerAdapter(List<T> list, HolderCreator<VH> holderCreator) {
this.mList = list;
mList = new ArrayList<>();
mList.addAll(list);
this.holderCreator = holderCreator;
}

Expand All @@ -58,6 +59,11 @@ Object instantiateItem(@NonNull final ViewGroup container, final int position) {
return itemView;
}

// @Override
// public int getItemPosition(@NonNull Object object) {
// return POSITION_NONE;
// }

private View findViewByPosition(ViewGroup container, int position) {
for (View view : mViewList) {
if (((int) view.getTag()) == position && view.getParent() == null) {
Expand Down Expand Up @@ -119,4 +125,20 @@ public void setCanLoop(boolean canLoop) {
public interface PageClickListener {
void onPageClick(int position);
}

// public void setList(List<T> list) {
// mList.clear();
// notifyDataSetChanged();
// mList.addAll(list);
// notifyDataSetChanged();
// mViewList.clear();
// }

public List<T> getList() {
return mList;
}

public int getListSize() {
return mList.size();
}
}
Loading

0 comments on commit 6e6e768

Please sign in to comment.