Browse Source

Optimize setRevealMethod.

zhpanvip 4 years ago
parent
commit
73eea35980

+ 5 - 10
README.md

@@ -100,7 +100,7 @@ It's also support to custom indicator style,just need extends BaseIndicatorView
 | BannerViewPager<T, VH> removeTransformer(ViewPager2.PageTransformer) | Remvoe page transformer | supported v3.0.0 |
 | BannerViewPager<T, VH> setCurrentItem(int) | Set the currently selected page. | supported v2.3.5|
 | int getCurrentItem() | return current position | Supported v2.3.5 |
-| BannerViewPager<T, VH> setPageStyle(PageStyle) | set page style for BVP | supported v2.4.0 enum(MULTI_PAGE、MULTI_PAGE_SCALE、MULTI_PAGE_OVERLAP)|
+| BannerViewPager<T, VH> setPageStyle(PageStyle) | set page style for BVP | supported v2.4.0 enum(MULTI_PAGE_SCALE;MULTI_PAGE_OVERLAP)|
 | BannerViewPager<T, VH> setPageMargin(int) |  | supported v2.4.0 |
 | BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) | set margin for indicator | supported v2.4.1 |
 | BannerViewPager<T, VH> registerOnPageChangeCallback(OnPageChangeListener) | Set a callback that will be invoked whenever the page changes or is incrementally scrolled. |  |
@@ -125,7 +125,7 @@ It's also support to custom indicator style,just need extends BaseIndicatorView
 | bvp_indicator_radius | dimension | if it's circle style the value is radius of circle,if the indicator style is DASH or ROUND_RECT the value is width/2   |
 | bvp_round_corner| dimension  | set round corner for BVP |
 | bvp_page_margin | dimension | set item margin |
-| bvp_reveal_width | dimension | it's only used when the page style is MULTI_PAGE/MULTI_PAGE_SCALE/MULTI_PAGE_OVERLAP,the value is two side item reveal width  |
+| bvp_reveal_width | dimension | it's only used when the page style is MULTI_PAGE_SCALE/MULTI_PAGE_OVERLAP,the value is two side item reveal width  |
 | bvp_indicator_style | enum | indicator style(circle/dash/round_rect)  |
 | bvp_indicator_slide_mode | enum | indicator slide mode(normal;smooth;worm;color;scale) |
 | bvp_indicator_gravity | enum | indicator gravity(center/start/end) |
@@ -495,24 +495,19 @@ you must add proguard rules,If you have called setScrollDuration method in you
 
 ## <span id="Sponsor"> Sponsor </span>
 
-**开源不易 随心赞赏**
+**如果您觉得BannerViewPager库还不错,帮您省了不少时间,可以点击Star表示对作者的支持,也可以扫描二维码请作者喝杯咖啡。**
 
 | Alipay | WeChat |
 |--|--|
 | ![Alipay](https://github.com/zhpanvip/Resource/blob/master/image/pay/pay_alipay.jpg) |  ![WeChat](https://github.com/zhpanvip/Resource/blob/master/image/pay/pay_wechat.png) |
 
-##  More details
-
-[《打造一个丝滑般自动轮播无限循环Android库》](https://juejin.im/post/5d6bce24f265da03db0790d1)
-
-[《BannerViewPager源码解析》](https://juejin.im/post/5d74d3faf265da03b5747015)
-
-[《剖析BannerViewPager中Indicator的设计思想》](https://juejin.im/post/5dda0b6d518825731f569a8c)
 
 ## Thanks
 
 [玩Android](https://wanandroid.com/)
+
 [finite-cover-flow](https://github.com/KoderLabs/finite-cover-flow)
+
 [zguop-banner](https://github.com/zguop/banner)
 
 License

+ 6 - 10
README_CN.md

@@ -99,7 +99,7 @@ BannerViewPager目前已支持三种IndicatorViewStyle,以及五种IndicatorSlid
 | BannerViewPager<T, VH> removeTransformer(ViewPager2.PageTransformer) | 3.0.0新增,移除页面Transformer |  |
 | BannerViewPager<T, VH> setCurrentItem(int) | Set the currently selected page. | 2.3.5新增 |
 | int getCurrentItem() | 获取当前position | 2.3.5新增 |
-| BannerViewPager<T, VH> setPageStyle(PageStyle) | 设置页面样式 | 2.4.0新增 可选(MULTI_PAGE、MULTI_PAGE_SCALE、MULTI_PAGE_OVERLAP)|
+| BannerViewPager<T, VH> setPageStyle(PageStyle) | 设置页面样式 | 2.4.0新增 可选(MULTI_PAGE_SCALE、MULTI_PAGE_OVERLAP)|
 | BannerViewPager<T, VH> setPageMargin(int) | 设置页面间隔 | 2.4.0新增 |
 | BannerViewPager<T, VH> setIndicatorMargin(int left, int top, int right, int bottom) | 设置Indicator边距 | 2.4.1新增 |
 | BannerViewPager<T, VH> registerOnPageChangeCallback(OnPageChangeListener) | 页面改变的监听事件 | 2.4.3新增 |
@@ -492,25 +492,21 @@ public class FigureIndicatorView extends BaseIndicatorView {
 
 ## <span id="Sponsor"> Sponsor </span>
 
-**开源不易 随心赞赏**
+
+**如果您觉得BannerViewPager库还不错,帮您省了不少时间,可以点击Star表示对作者的支持,也可以扫描二维码请作者喝杯咖啡。**
 
 | 支付宝 | 微信支付 |
 |--|--|
 | ![NORMAL](https://github.com/zhpanvip/Resource/blob/master/image/pay/pay_alipay.jpg) |  ![SMOOTH](https://github.com/zhpanvip/Resource/blob/master/image/pay/pay_wechat.png) |
 
 
-##  更多详情请参看以下链接
-
-[《打造一个丝滑般自动轮播无限循环Android库》](https://juejin.im/post/5d6bce24f265da03db0790d1)
-
-[《BannerViewPager源码解析》](https://juejin.im/post/5d74d3faf265da03b5747015)
-
-[《剖析BannerViewPager中Indicator的设计思想》](https://juejin.im/post/5dda0b6d518825731f569a8c)
-
 ## 感谢
 
 [玩Android](https://wanandroid.com/)
 
+[finite-cover-flow](https://github.com/KoderLabs/finite-cover-flow)
+
+[zguop-banner](https://github.com/zguop/banner)
 
 License
 -------

+ 3 - 1
app/build.gradle

@@ -9,11 +9,12 @@ android {
         minSdkVersion 21
         targetSdkVersion 28
         versionCode 1
-        versionName "1.0"
+        versionName "3.1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
     buildTypes {
         release {
+            debuggable false
             minifyEnabled true
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
@@ -62,4 +63,5 @@ dependencies {
     implementation 'com.google.android.material:material:1.1.0'
     implementation "androidx.navigation:navigation-fragment:2.2.2"
     implementation "androidx.navigation:navigation-ui:2.2.2"
+    implementation 'com.tencent.bugly:crashreport:3.2.1'
 }

+ 3 - 1
app/proguard-rules.pro

@@ -28,4 +28,6 @@
 -keep class com.zhpan.idea.** { *; }
 
 -keep class androidx.recyclerview.widget.**{*;}
--keep class androidx.viewpager2.widget.**{*;}
+-keep class androidx.viewpager2.widget.**{*;}
+-dontwarn com.tencent.bugly.**
+-keep public class com.tencent.bugly.**{*;}

BIN
app/release/app-release.apk


+ 2 - 1
app/src/main/AndroidManifest.xml

@@ -4,6 +4,8 @@
 
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 
     <application
         android:name=".App"
@@ -12,7 +14,6 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".activity.BaseCompatActivity"></activity>
         <activity
             android:name=".activity.WelcomeActivity"
             android:theme="@style/FullScreenTheme">

+ 2 - 0
app/src/main/java/com/example/zhpan/circleviewpager/App.java

@@ -2,6 +2,7 @@ package com.example.zhpan.circleviewpager;
 
 import android.app.Application;
 
+import com.tencent.bugly.crashreport.CrashReport;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.idea.utils.Utils;
 
@@ -18,5 +19,6 @@ public class App extends Application {
         super.onCreate();
         Utils.init(getApplicationContext());
         BannerUtils.setDebugMode(true);
+        CrashReport.initCrashReport(getApplicationContext(), "69b176a2b6", true);
     }
 }

+ 2 - 2
app/src/main/java/com/example/zhpan/circleviewpager/activity/WelcomeActivity.kt

@@ -26,7 +26,7 @@ class WelcomeActivity : BaseDataActivity() {
 
     private val des = arrayOf("在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人")
 
-    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.STACK, TransformerStyle.DEPTH, TransformerStyle.ROTATE, TransformerStyle.SCALE_IN)
+    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION,  TransformerStyle.DEPTH, TransformerStyle.ROTATE, TransformerStyle.SCALE_IN)
 
     private val data: List<CustomBean>
         get() {
@@ -51,7 +51,7 @@ class WelcomeActivity : BaseDataActivity() {
         mViewPager = findViewById(R.id.viewpager)
         mViewPager.apply {
             setCanLoop(false)
-            setPageTransformer(PageTransformerFactory.createPageTransformer(transforms[Random().nextInt(6)]))
+            setPageTransformer(PageTransformerFactory.createPageTransformer(transforms[Random().nextInt(5)]))
             setIndicatorMargin(0, 0, 0, resources.getDimension(R.dimen.dp_100).toInt())
             setIndicatorSliderGap(resources.getDimension(R.dimen.dp_10).toInt())
             setIndicatorSlideMode(IndicatorSlideMode.SMOOTH)

+ 11 - 2
app/src/main/java/com/example/zhpan/circleviewpager/fragment/HomeFragment.java

@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.viewpager2.widget.ViewPager2;
 
 import com.example.zhpan.circleviewpager.R;
+import com.example.zhpan.circleviewpager.activity.WebViewActivity;
 import com.example.zhpan.circleviewpager.adapter.ArticleAdapter;
 import com.example.zhpan.circleviewpager.adapter.HomeAdapter;
 import com.example.zhpan.circleviewpager.adapter.ImageResourceAdapter;
@@ -39,6 +40,8 @@ import java.util.List;
 import io.reactivex.Observable;
 import io.reactivex.schedulers.Schedulers;
 
+import static com.example.zhpan.circleviewpager.net.BannerData.TYPE_NEW;
+
 /**
  * Created by zhpan on 2018/7/24.
  */
@@ -128,7 +131,7 @@ public class HomeFragment extends BaseFragment {
                         List<BannerData> dataList = response.getDataBeanList();
                         BannerData bannerData = new BannerData();
                         bannerData.setDrawable(R.drawable.bg_card0);
-                        bannerData.setType(BannerData.TYPE_NEW);
+                        bannerData.setType(TYPE_NEW);
                         bannerData.setTitle("这是一个自定义类型");
                         dataList.add(1, bannerData);
                         mViewPagerHorizontal.refreshData(dataList);
@@ -197,7 +200,13 @@ public class HomeFragment extends BaseFragment {
 
     private void onPageClicked(int position) {
         BannerData bannerData = mViewPagerHorizontal.getData().get(position);
-        Toast.makeText(getMContext(), "position:" + position + " " + bannerData.getTitle() + "currentItem:" + mViewPagerHorizontal.getCurrentItem(), Toast.LENGTH_SHORT).show();
+        if (bannerData.getType() != TYPE_NEW) {
+            if (getActivity() != null) {
+                WebViewActivity.start(getActivity(), bannerData.getTitle(), bannerData.getUrl());
+            }
+        } else {
+            Toast.makeText(getMContext(), "position:" + position + " " + bannerData.getTitle() + "currentItem:" + mViewPagerHorizontal.getCurrentItem(), Toast.LENGTH_SHORT).show();
+        }
     }
 
     private View getHeaderView() {

+ 29 - 0
app/src/main/java/com/example/zhpan/circleviewpager/fragment/PageFragment.java

@@ -11,6 +11,7 @@ import com.example.zhpan.circleviewpager.viewholder.ImageResourceViewHolder;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.constants.PageStyle;
+import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.idea.utils.ToastUtils;
 import com.zhpan.indicator.enums.IndicatorSlideMode;
 
@@ -82,6 +83,12 @@ public class PageFragment extends BaseFragment {
                 case R.id.rb_multi_page_overlap:
                     setupBanner(PageStyle.MULTI_PAGE_OVERLAP);
                     break;
+                case R.id.rb_qq_music_style:
+                    setQQMusicStyle();
+                    break;
+                case R.id.rb_netease_music_style:
+                    setNetEaseMusicStyle();
+                    break;
             }
         });
     }
@@ -111,4 +118,26 @@ public class PageFragment extends BaseFragment {
                 .create(getPicList(4));
     }
 
+    // 网易云音乐样式
+    private void setNetEaseMusicStyle() {
+        mViewPager
+                .setPageMargin(getResources().getDimensionPixelOffset(R.dimen.dp_20))
+                .setRevealWidth(getResources().getDimensionPixelOffset(R.dimen.dp_m_10))
+                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
+                .setInterval(5000).create(getPicList(4));
+        mViewPager.removeDefaultPageTransformer();
+    }
+
+    //  仿QQ音乐的Banner
+    private void setQQMusicStyle() {
+        mViewPager
+                .setPageMargin(getResources().getDimensionPixelOffset(R.dimen.dp_15))
+                .setRevealWidth(BannerUtils.dp2px(0))
+                .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
+                .setOnPageClickListener(position -> ToastUtils.show("position:" + position))
+                .setInterval(5000).create(getPicList(4));
+        mViewPager.removeDefaultPageTransformer();
+    }
+
 }

+ 2 - 0
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/NetViewHolder.java

@@ -5,6 +5,8 @@ import android.view.View;
 import androidx.annotation.NonNull;
 
 import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.bumptech.glide.request.RequestOptions;
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.net.BannerData;
 import com.example.zhpan.circleviewpager.view.CornerImageView;

+ 20 - 3
app/src/main/res/layout/fragment_find.xml

@@ -53,9 +53,9 @@
             android:id="@+id/rb_multi_page"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:layout_marginEnd="@dimen/dp_15"
-            android:text="two sides page reveal"
             android:layout_marginTop="@dimen/dp_15"
+            android:layout_marginEnd="@dimen/dp_15"
+            android:text="Two Sides Page Reveal"
 
             android:textSize="@dimen/sp_16" />
 
@@ -65,9 +65,26 @@
             android:layout_height="wrap_content"
             android:layout_marginTop="@dimen/dp_15"
             android:layout_marginEnd="@dimen/dp_15"
-            android:text="right page reveal"
+            android:text="Right Page Reveal"
+            android:textSize="@dimen/sp_16" />
+
+        <RadioButton
+            android:id="@+id/rb_qq_music_style"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/dp_15"
+            android:text="QQ Music Banner Style"
             android:textSize="@dimen/sp_16" />
 
+        <RadioButton
+            android:id="@+id/rb_netease_music_style"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/dp_15"
+            android:text="NetEase Music Banner Style"
+            android:textSize="@dimen/sp_16" />
+
+
     </RadioGroup>
 
 </RelativeLayout>

+ 1 - 2
app/src/main/res/layout/item_net.xml

@@ -6,8 +6,7 @@
     <com.example.zhpan.circleviewpager.view.CornerImageView
         android:id="@+id/banner_image"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
+        android:layout_height="match_parent" />
 
     <!--<LinearLayout
         android:layout_width="match_parent"

+ 2 - 2
app/src/main/res/layout/item_page_indicator.xml

@@ -7,8 +7,8 @@
         android:id="@+id/banner_image"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:layout_marginStart="@dimen/dp_16"
-        android:layout_marginEnd="@dimen/dp_16"
+        android:layout_marginStart="@dimen/dp_10"
+        android:layout_marginEnd="@dimen/dp_10"
         android:contentDescription="@string/image_description"
         android:scaleType="centerCrop" />
 

BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


+ 2 - 1
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -40,6 +40,7 @@ import static com.zhpan.bannerview.BaseBannerAdapter.MAX_VALUE;
 import static com.zhpan.bannerview.constants.IndicatorGravity.CENTER;
 import static com.zhpan.bannerview.constants.IndicatorGravity.END;
 import static com.zhpan.bannerview.constants.IndicatorGravity.START;
+import static com.zhpan.bannerview.manager.BannerOptions.DEFAULT_REVEAL_WIDTH;
 import static com.zhpan.bannerview.transform.ScaleInTransformer.DEFAULT_MIN_SCALE;
 
 /**
@@ -335,7 +336,7 @@ public class BannerViewPager<T, VH extends BaseViewHolder<T>> extends RelativeLa
         BannerOptions bannerOptions = mBannerManager.getBannerOptions();
         if (bannerOptions.getScrollDuration() != 0)
             ScrollDurationManger.reflectLayoutManager(mViewPager, bannerOptions.getScrollDuration());
-        if (bannerOptions.getRightRevealWidth() > 0 || bannerOptions.getLeftRevealWidth() > 0) {
+        if (bannerOptions.getRightRevealWidth() != DEFAULT_REVEAL_WIDTH || bannerOptions.getLeftRevealWidth() != DEFAULT_REVEAL_WIDTH) {
             RecyclerView recyclerView = (RecyclerView) mViewPager.getChildAt(0);
             int orientation = bannerOptions.getOrientation();
             int padding2 = bannerOptions.getPageMargin() + bannerOptions.getRightRevealWidth();

+ 3 - 1
bannerview/src/main/java/com/zhpan/bannerview/manager/AttributeController.java

@@ -11,6 +11,8 @@ import androidx.annotation.Nullable;
 import com.zhpan.bannerview.R;
 import com.zhpan.bannerview.utils.BannerUtils;
 
+import static com.zhpan.bannerview.manager.BannerOptions.DEFAULT_REVEAL_WIDTH;
+
 /**
  * <pre>
  *   Created by zhpan on 2019/11/20.
@@ -58,7 +60,7 @@ public class AttributeController {
         boolean isCanLoop = typedArray.getBoolean(R.styleable.BannerViewPager_bvp_can_loop, true);
         int pageMargin = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_page_margin, 0);
         int roundCorner = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_round_corner, 0);
-        int revealWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_reveal_width, 0);
+        int revealWidth = (int) typedArray.getDimension(R.styleable.BannerViewPager_bvp_reveal_width, DEFAULT_REVEAL_WIDTH);
         int pageStyle = typedArray.getInt(R.styleable.BannerViewPager_bvp_page_style, 0);
         int scrollDuration = typedArray.getInt(R.styleable.BannerViewPager_bvp_scroll_duration, 0);
         mBannerOptions.setInterval(interval);

+ 4 - 1
bannerview/src/main/java/com/zhpan/bannerview/manager/BannerOptions.java

@@ -21,9 +21,12 @@ public class BannerOptions {
     public BannerOptions() {
         mIndicatorOptions = new IndicatorOptions();
         pageMargin = BannerUtils.dp2px(20);
-        rightRevealWidth = BannerUtils.dp2px(20);
+        rightRevealWidth = DEFAULT_REVEAL_WIDTH;
+        leftRevealWidth = DEFAULT_REVEAL_WIDTH;
     }
 
+    public static final int DEFAULT_REVEAL_WIDTH = -1000;
+
     private int offScreenPageLimit = ViewPager2.OFFSCREEN_PAGE_LIMIT_DEFAULT;
 
     private int interval;