Browse Source

Remove ViewPagerActivity,add refresh layout.

zhangpan 5 years ago
parent
commit
6a26ba189b

+ 5 - 4
app/build.gradle

@@ -1,7 +1,7 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 26
+    compileSdkVersion 27
     buildToolsVersion '28.0.3'
     defaultConfig {
         applicationId "com.example.zhpan.circleviewpager"
@@ -42,14 +42,15 @@ dependencies {
     androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
-    implementation 'com.android.support:appcompat-v7:26.1.0'
-    implementation 'com.android.support:recyclerview-v7:26.1.0'
+    implementation "com.android.support:appcompat-v7:${rootProject.supportLibVersion}"
+    implementation "com.android.support:recyclerview-v7:${rootProject.supportLibVersion}"
     testImplementation 'junit:junit:4.12'
     implementation 'com.github.bumptech.glide:glide:4.0.0'
     implementation 'com.github.chrisbanes:PhotoView:2.1.0'
 //    implementation 'com.zhpan.library:bannerview:2.1.1'
     implementation project(path: ':bannerview')
-
+    implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0'
+    implementation 'com.scwang.smartrefresh:SmartRefreshHeader:1.1.0'
     debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-2'
     implementation project(path: ':ideahttp')
 }

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

@@ -12,11 +12,10 @@
         android:label="@string/app_name"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".activity.PageTransformerActivity"></activity>
+        <activity android:name=".activity.PageTransformerActivity"/>
         <activity android:name=".activity.NetworkBannerActivity" />
         <activity android:name=".activity.CustomerBannerActivity" />
         <activity android:name=".activity.BannerPhotoViewActivity" />
-        <activity android:name=".activity.ViewPagerActivity" />
         <activity android:name=".activity.MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />

+ 7 - 4
app/src/main/java/com/example/zhpan/circleviewpager/activity/CustomerBannerActivity.java

@@ -16,7 +16,10 @@ import java.util.List;
 public class CustomerBannerActivity extends AppCompatActivity {
     private List<CustomBean> mList = new ArrayList<>();
     private BannerViewPager<CustomBean, CustomPageViewHolder> mViewPager;
-
+    private String[] picUrls = {"http://pic31.nipic.com/20130801/11604791_100539834000_2.jpg",
+            "http://pic37.nipic.com/20140115/7430301_100825571157_2.jpg",
+            "http://pic29.nipic.com/20130507/8952533_183922555000_2.jpg",
+            "http://b-ssl.duitang.com/uploads/item/201706/10/20170610095055_G5LM8.jpeg"};
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -47,10 +50,10 @@ public class CustomerBannerActivity extends AppCompatActivity {
     }
 
     private void initData() {
-        for (int i = 0; i <= 3; i++) {
-            int drawable = getResources().getIdentifier("b" + i, "drawable", getPackageName());
+
+        for (int i = 0; i < picUrls.length; i++) {
             CustomBean customBean = new CustomBean();
-            customBean.setImageRes(drawable);
+            customBean.setImgUrl(picUrls[i]);
             customBean.setImageDescription("这是第" + (i + 1) + "张图片的描述");
             mList.add(customBean);
         }

+ 1 - 4
app/src/main/java/com/example/zhpan/circleviewpager/activity/MainActivity.java

@@ -23,9 +23,6 @@ public class MainActivity extends AppCompatActivity {
     public void onClick(View view) {
         Intent intent;
         switch (view.getId()) {
-            case R.id.btn_view_pager1:
-                intent = new Intent(this, ViewPagerActivity.class);
-                break;
             case R.id.btn_view_pager2:
                 intent = new Intent(this, CustomerBannerActivity.class);
                 break;
@@ -39,7 +36,7 @@ public class MainActivity extends AppCompatActivity {
                 intent = new Intent(this, PageTransformerActivity.class);
                 break;
             default:
-                intent = new Intent(this, ViewPagerActivity.class);
+                intent = new Intent(this, CustomerBannerActivity.class);
                 break;
         }
         startActivity(intent);

+ 22 - 5
app/src/main/java/com/example/zhpan/circleviewpager/activity/NetworkBannerActivity.java

@@ -15,6 +15,8 @@ import com.example.zhpan.circleviewpager.net.BannerData;
 import com.example.zhpan.circleviewpager.net.RetrofitGnerator;
 import com.example.zhpan.circleviewpager.recyclerview.ui.CustomRecyclerView;
 import com.example.zhpan.circleviewpager.viewholder.NetViewHolder;
+import com.scwang.smartrefresh.header.MaterialHeader;
+import com.scwang.smartrefresh.layout.SmartRefreshLayout;
 import com.trello.rxlifecycle2.components.support.RxAppCompatActivity;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.idea.net.common.DefaultObserver;
@@ -31,28 +33,44 @@ public class NetworkBannerActivity extends RxAppCompatActivity {
     private BannerViewPager<BannerData, NetViewHolder> mBannerViewPager;
     private CustomRecyclerView recyclerView;
     private ArticleAdapter articleAdapter;
+    private SmartRefreshLayout mSmartRefreshLayout;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_network_banner);
         setTitle(R.string.load_data);
+        initRefreshLayout();
         initBanner();
-        fetchData();
+        fetchData(true);
     }
 
-    private void fetchData() {
+    private void initRefreshLayout() {
+        mSmartRefreshLayout = findViewById(R.id.refresh_layout);
+        mSmartRefreshLayout.setRefreshHeader(new MaterialHeader(this));
+        mSmartRefreshLayout.setOnRefreshListener(refreshLayout -> fetchData(false));
+    }
+
+    private void fetchData(boolean showLoading) {
         Observable.zip(getBannerObserver(), getArticleObserver(), (bannerData, articles) -> {
             DataWrapper dataWrapper = new DataWrapper();
             dataWrapper.setArticleList(articles.getDatas());
             dataWrapper.setDataBeanList(bannerData);
             return dataWrapper;
-        }).compose(RxUtil.rxSchedulerHelper(this))
+        }).compose(RxUtil.rxSchedulerHelper(this, showLoading))
                 .subscribe(new DefaultObserver<DataWrapper>() {
                     @Override
                     public void onSuccess(DataWrapper response) {
+                        recyclerView.addItemDecoration(new DividerItemDecoration(NetworkBannerActivity.this,
+                                DividerItemDecoration.VERTICAL));
                         mBannerViewPager.setData(response.getDataBeanList());
-                        articleAdapter.addData(response.getArticleList());
+                        articleAdapter.setData(response.getArticleList());
+                    }
+
+                    @Override
+                    public void onFinish() {
+                        super.onFinish();
+                        mSmartRefreshLayout.finishRefresh();
                     }
                 });
     }
@@ -69,7 +87,6 @@ public class NetworkBannerActivity extends RxAppCompatActivity {
         recyclerView = findViewById(R.id.recycler_view);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
         recyclerView.addHeadView(getHeaderView());
-        recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
         articleAdapter = new ArticleAdapter(this, new ArrayList<>());
         recyclerView.setAdapter(articleAdapter);
         mBannerViewPager.showIndicator(true)

+ 0 - 57
app/src/main/java/com/example/zhpan/circleviewpager/activity/ViewPagerActivity.java

@@ -1,57 +0,0 @@
-package com.example.zhpan.circleviewpager.activity;
-
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.widget.Toast;
-
-import com.example.zhpan.circleviewpager.bean.DataBean;
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.viewholder.DataViewHolder;
-import com.zhpan.bannerview.BannerViewPager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class ViewPagerActivity extends AppCompatActivity {
-    private BannerViewPager<DataBean, DataViewHolder> mViewpager;
-    private List<DataBean> mDataList = new ArrayList<>();
-    private String[] picUrls = {"http://pic31.nipic.com/20130801/11604791_100539834000_2.jpg",
-            "http://pic37.nipic.com/20140115/7430301_100825571157_2.jpg",
-            "http://pic29.nipic.com/20130507/8952533_183922555000_2.jpg",
-            "http://b-ssl.duitang.com/uploads/item/201706/10/20170610095055_G5LM8.jpeg"};
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_view_pager);
-        setTitle(R.string.title_view_pager);
-        initData();
-        initViewPager();
-    }
-
-    private void initViewPager() {
-        mViewpager = findViewById(R.id.viewpager);
-        mViewpager.showIndicator(true)
-                .setInterval(3000)
-                .setRoundCorner(R.dimen.banner_corner)
-                .setScrollDuration(1000)
-                .setData(mDataList)
-                .setHolderCreator(DataViewHolder::new)
-                .setOnPageClickListener(position -> Toast.makeText(ViewPagerActivity.this,
-                        "点击了图片" + position, Toast.LENGTH_SHORT).show())
-                .create();
-    }
-
-    private void initData() {
-        for (int i = 0; i < picUrls.length; i++) {
-            DataBean dataBean = new DataBean(picUrls[i]);
-            mDataList.add(dataBean);
-        }
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mViewpager.stopLoop();
-    }
-}

+ 10 - 0
app/src/main/java/com/example/zhpan/circleviewpager/bean/CustomBean.java

@@ -8,6 +8,16 @@ public class CustomBean {
 
     private String imageDescription;
 
+    private String imgUrl;
+
+    public String getImgUrl() {
+        return imgUrl;
+    }
+
+    public void setImgUrl(String imgUrl) {
+        this.imgUrl = imgUrl;
+    }
+
     public int getImageRes() {
         return imageRes;
     }

+ 4 - 1
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/CustomPageViewHolder.java

@@ -9,6 +9,8 @@ import android.widget.TextView;
 
 import com.example.zhpan.circleviewpager.R;
 import com.example.zhpan.circleviewpager.bean.CustomBean;
+import com.example.zhpan.circleviewpager.imageloader.ImageLoaderManager;
+import com.example.zhpan.circleviewpager.imageloader.ImageLoaderOptions;
 import com.zhpan.bannerview.holder.ViewHolder;
 
 public class CustomPageViewHolder implements ViewHolder<CustomBean> {
@@ -25,7 +27,8 @@ public class CustomPageViewHolder implements ViewHolder<CustomBean> {
 
     @Override
     public void onBind(Context context, CustomBean data, int position, int size) {
-        mImageView.setImageResource(data.getImageRes());
+        ImageLoaderOptions options = new ImageLoaderOptions.Builder().into(mImageView).load(data.getImgUrl()).placeHolder(R.drawable.placeholder).build();
+        ImageLoaderManager.getInstance().loadImage(options);
         mTextView.setText(data.getImageDescription());
     }
 }

+ 0 - 36
app/src/main/java/com/example/zhpan/circleviewpager/viewholder/DataViewHolder.java

@@ -1,36 +0,0 @@
-package com.example.zhpan.circleviewpager.viewholder;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.example.zhpan.circleviewpager.bean.DataBean;
-import com.example.zhpan.circleviewpager.R;
-import com.example.zhpan.circleviewpager.imageloader.ImageLoaderManager;
-import com.example.zhpan.circleviewpager.imageloader.ImageLoaderOptions;
-import com.zhpan.bannerview.holder.ViewHolder;
-
-/**
- * Created by zhpan on 2017/10/30.
- * Description:
- */
-
-public class DataViewHolder implements ViewHolder<DataBean> {
-    private ImageView mImageView;
-
-    @Override
-    public View createView(ViewGroup viewGroup, Context context, int position) {
-        // 返回页面布局文件
-        View view = LayoutInflater.from(context).inflate(R.layout.item_view, viewGroup, false);
-        mImageView = view.findViewById(R.id.banner_image);
-        return view;
-    }
-
-    @Override
-    public void onBind(final Context context, DataBean data, final int position, final int size) {
-        ImageLoaderOptions options = new ImageLoaderOptions.Builder().into(mImageView).load(data.getUrl()).placeHolder(R.drawable.placeholder).build();
-        ImageLoaderManager.getInstance().loadImage(options);
-    }
-}

+ 5 - 13
app/src/main/res/layout/activity_main.xml

@@ -8,11 +8,11 @@
     android:padding="15dp">
 
     <Button
-        android:id="@+id/btn_view_pager1"
+        android:id="@+id/btn_view_pager4"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:onClick="onClick"
-        android:text="自动轮播示例" />
+        android:text="@string/load_data" />
 
     <Button
         android:id="@+id/btn_view_pager2"
@@ -20,7 +20,7 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="15dp"
         android:onClick="onClick"
-        android:text="自定义布局示例" />
+        android:text="@string/title_custom_page" />
 
     <Button
         android:id="@+id/btn_view_pager3"
@@ -28,15 +28,7 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="15dp"
         android:onClick="onClick"
-        android:text="嵌套PhotoView示例" />
-
-    <Button
-        android:id="@+id/btn_view_pager4"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="15dp"
-        android:onClick="onClick"
-        android:text="获取服务器数据显示Banner" />
+        android:text="@string/wrapper_photo_view" />
 
     <Button
         android:id="@+id/btn_view_pager5"
@@ -44,6 +36,6 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="15dp"
         android:onClick="onClick"
-        android:text="Page Transformer" />
+        android:text="@string/title_transformer" />
 
 </LinearLayout>

+ 9 - 3
app/src/main/res/layout/activity_network_banner.xml

@@ -6,9 +6,15 @@
     android:orientation="vertical"
     tools:context=".activity.NetworkBannerActivity">
 
-    <com.example.zhpan.circleviewpager.recyclerview.ui.CustomRecyclerView
-        android:id="@+id/recycler_view"
+    <com.scwang.smartrefresh.layout.SmartRefreshLayout
+        android:id="@+id/refresh_layout"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:overScrollMode="never"
+        android:layout_height="match_parent">
 
+        <com.example.zhpan.circleviewpager.recyclerview.ui.CustomRecyclerView
+            android:id="@+id/recycler_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </com.scwang.smartrefresh.layout.SmartRefreshLayout>
 </LinearLayout>

+ 0 - 12
app/src/main/res/layout/activity_view_pager.xml

@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <com.zhpan.bannerview.BannerViewPager
-        android:id="@+id/viewpager"
-        android:layout_width="match_parent"
-        android:layout_height="150dp"
-        android:layout_margin="10dp" />
-
-</LinearLayout>

+ 1 - 1
app/src/main/res/layout/item_view.xml

@@ -7,5 +7,5 @@
         android:id="@+id/banner_image"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
+        android:scaleType="fitXY" />
 </RelativeLayout>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -3,6 +3,6 @@
     <string name="wrapper_photo_view">嵌套PhotoView</string>
     <string name="title_custom_page">自定义页面样式</string>
     <string name="title_view_pager">圆角自动轮播</string>
-    <string name="load_data">加载网络数据</string>
+    <string name="load_data">嵌套RecyclerView</string>
     <string name="title_transformer">Page Transformer</string>
 </resources>

+ 2 - 2
bannerview/build.gradle

@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
 apply plugin: 'com.github.dcendents.android-maven'
 apply plugin: 'com.jfrog.bintray'
 android {
-    compileSdkVersion 26
+    compileSdkVersion 27
 
     defaultConfig {
         minSdkVersion 19
@@ -34,7 +34,7 @@ dependencies {
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'com.android.support.test:runner:1.0.2'
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-    implementation 'com.android.support:appcompat-v7:26.1.0'
+    implementation 'com.android.support:appcompat-v7:27.1.1'
 }
 
 version = "2.1.2"

+ 7 - 5
bannerview/src/main/java/com/zhpan/bannerview/BannerViewPager.java

@@ -14,7 +14,6 @@ import android.util.AttributeSet;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.FrameLayout;
 import android.widget.RelativeLayout;
 
@@ -127,7 +126,7 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
             gravity = typedArray.getInt(R.styleable.BannerViewPager_indicator_gravity, 0);
             typedArray.recycle();
         }
-        View view = LayoutInflater.from(getContext()).inflate(R.layout.view_pager_layout, this);
+        View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_banner_view_pager, this);
         mIndicatorView = view.findViewById(R.id.indicator_view);
         mViewPager = view.findViewById(R.id.vp_main);
         mRelativeLayout = view.findViewById(R.id.rl_banner);
@@ -137,12 +136,15 @@ public class BannerViewPager<T, VH extends ViewHolder> extends FrameLayout imple
 
     private void initScroller() {
         try {
-            Field mField = ViewPager.class.getDeclaredField("mScroller");
-            mField.setAccessible(true);
             mScroller = new BannerScroller(mViewPager.getContext());
             mScroller.setDuration(DEFAULT_SCROLL_DURATION);
-            mField.set(mViewPager, mScroller);
+            Field mField = ViewPager.class.getDeclaredField("mScroller");
+            if (null != mField) {
+                mField.setAccessible(true);
+                mField.set(mViewPager, mScroller);
+            }
         } catch (Exception e) {
+            e.printStackTrace();
         }
     }
 

+ 0 - 11
bannerview/src/main/res/layout/banner_item.xml

@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent">
-    <ImageView
-        android:id="@+id/banner_image"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scaleType="centerCrop" />
-</LinearLayout>

+ 0 - 0
bannerview/src/main/res/layout/view_pager_layout.xml → bannerview/src/main/res/layout/layout_banner_view_pager.xml


+ 2 - 2
build.gradle

@@ -31,12 +31,12 @@ task clean(type: Delete) {
 
 ext {
     compileSdkVersion=27
-    buildToolsVersion = '27.0.3'
+    buildToolsVersion = '27.1.1'
     targetSdkVersion = 26
     minSdkVersion = 19
     releaseVersionCode = 1
     releaseVersionName = '1.0.0'
-    supportLibVersion = "27.0.2"
+    supportLibVersion = "27.1.1"
 
     rxjava2Version = '2.0.8'
     retrofit2Version = '2.2.0'

+ 7 - 4
ideahttp/src/main/java/com/zhpan/idea/utils/RxUtil.java

@@ -20,14 +20,18 @@ public class RxUtil {
      * @param <T>
      * @return
      */
-    public static <T> ObservableTransformer<T, T> rxSchedulerHelper(final RxAppCompatActivity activity) {    //compose简化线程
+    public static <T> ObservableTransformer<T, T> rxSchedulerHelper(final RxAppCompatActivity activity, final boolean showLoading) {    //compose简化线程
         return new ObservableTransformer<T, T>() {
             @Override
             public ObservableSource<T> apply(Observable<T> observable) {
-                return observable.subscribeOn(Schedulers.io())
+                Observable<T> compose = observable.subscribeOn(Schedulers.io())
                         .observeOn(AndroidSchedulers.mainThread())
-                        .compose(ProgressUtils.<T>applyProgressBar(activity))
                         .compose(activity.<T>bindUntilEvent(ActivityEvent.DESTROY));
+                if (showLoading) {
+                    return compose.compose(ProgressUtils.<T>applyProgressBar(activity));
+                } else {
+                    return compose;
+                }
             }
         };
     }
@@ -51,7 +55,6 @@ public class RxUtil {
     }
 
 
-
     /**
      * 统一线程处理
      *