diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 8a21463..fe21ac7 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 681f41a..88ea3aa 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,5 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 2cc1dda..8d8276c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -12,6 +12,7 @@ @@ -123,9 +272,9 @@ - - - + + + @@ -136,24 +285,28 @@ + + + + - - - - - + + + + + - + + + + @@ -273,7 +477,14 @@ @@ -310,54 +521,91 @@ - - - + + + - - + + - - + + + + + + + + - - + + + - - + + + - - + + + - - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + diff --git a/README.md b/README.md index e2d4548..fabdb44 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,10 @@ android.enableJetifier=true ## 版本说明 +**v2.8** + +- 添加 Androidx lib,支持viewpager2 + **v2.7** - 处理设置 setCurrentPosition 的问题 @@ -221,6 +225,8 @@ android.enableJetifier=true |banner_card_height|integer,dimension|卡片的高度| |banner_iscycle|boolean|是否循环| |banner_transformer|card,mz,zoom,depath|transformer的效果| +|banner2_l_margin|dimension|Viewpager2专属,左边偏移量| +|banner2_r_margin|dimension|Viewpager2专属,右边偏移量| **CircleIndicator** diff --git a/README_Banner.md b/README_Banner.md index a8d5175..c8f245c 100644 --- a/README_Banner.md +++ b/README_Banner.md @@ -40,6 +40,14 @@ 主要为 **BannerViewPager** 这个类,在布局中,添加自己喜欢的 Indicator 即可。 + +## ViewPager2 的使用 + +ViewPager2 使用的类是 BannerViewPager2,所以它的使用与 BannerViewPager 差不多,只是魅族方法中, +偏移量使用的是 **banner2_l_margin和banner2_r_margin**,也可以动态设置,使用**setMzMargin()**, +当然,此时 xml 就不要用 layout_margin = "20dp"这样的方法了。 +为什么不统一?ViewPager2 是final,继承不了,没辙。。。。 + ### Banner + Indicator 首先,一个简单的 banner + indicator 如下,如果想要第一种效果,记得父布局 clipChildren="false": ``` diff --git a/app/app.iml b/app/app.iml index 5e8d421..b0a0bd3 100644 --- a/app/app.iml +++ b/app/app.iml @@ -87,23 +87,24 @@ + - - - - - - - - - - - + + + + + + + + + + + @@ -115,37 +116,37 @@ - - - - + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java b/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java index e146f6c..affa563 100644 --- a/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java +++ b/app/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java @@ -38,8 +38,6 @@ public void fragment(View view) { startActivity(new Intent(this, TabActivity.class)); } - - public void arc(View view) { startActivity(new Intent(this, ArcActivity.class)); } diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java index f7e6bfa..ef7d371 100644 --- a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java +++ b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java @@ -1,10 +1,10 @@ package com.zhengsr.viewpagerhelper.adapter; +import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; -import androidx.recyclerview.widget.RecyclerView; import java.util.List; diff --git a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java index b5f686c..b1c391e 100644 --- a/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java +++ b/app/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java @@ -1,6 +1,7 @@ package com.zhengsr.viewpagerhelper.adapter; import android.content.Context; +import android.support.v7.widget.RecyclerView; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; @@ -8,7 +9,6 @@ import android.widget.ImageView; import android.widget.TextView; -import androidx.recyclerview.widget.RecyclerView; /** * Created by zhengshaorui on 2018/4/13. diff --git a/appx/.gitignore b/appx/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/appx/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/appx/build.gradle b/appx/build.gradle new file mode 100644 index 0000000..a3ce66c --- /dev/null +++ b/appx/build.gradle @@ -0,0 +1,53 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 30 + buildToolsVersion "30.0.1" + + defaultConfig { + applicationId "com.zhengsr.viewpagerhelper" + minSdkVersion 19 + targetSdkVersion 30 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.1' + implementation project(path: ':viewpagerlibx') + testImplementation 'junit:junit:4.12' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'androidx.viewpager2:viewpager2:1.0.0' + + implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4' + implementation 'com.squareup.retrofit2:retrofit:2.5.0' + implementation 'com.squareup.retrofit2:converter-scalars:2.5.0' + + implementation 'io.reactivex.rxjava2:rxjava:2.2.10' + implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' + implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0' + implementation 'com.alibaba:fastjson:1.1.71.android' + + implementation 'de.hdodenhof:circleimageview:3.0.1' + implementation 'com.github.bumptech.glide:glide:4.11.0' + implementation 'org.ligboy.retrofit2:converter-fastjson-android:2.1.0' + +} diff --git a/appx/proguard-rules.pro b/appx/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/appx/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt b/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..5635d81 --- /dev/null +++ b/appx/src/androidTest/java/com/zhengsr/viewpagerhelper/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.zhengsr.viewpagerhelper + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.zhengsr.appx", appContext.packageName) + } +} \ No newline at end of file diff --git a/appx/src/main/AndroidManifest.xml b/appx/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e21ebe4 --- /dev/null +++ b/appx/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java new file mode 100644 index 0000000..bc7a6f1 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/CustomViewPager.java @@ -0,0 +1,64 @@ +package com.zhengsr.viewpagerhelper; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.SparseArray; +import android.view.View; + +import androidx.viewpager.widget.ViewPager; + +import java.util.ArrayList; +import java.util.Collections; + +public class CustomViewPager extends ViewPager { + private ArrayList childCenterXAbs = new ArrayList<>(); + private SparseArray childIndex = new SparseArray<>(); + + public CustomViewPager(Context context) { + super(context); + init(); + } + + public CustomViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + private void init(){ + setClipToPadding(false); + setOverScrollMode(OVER_SCROLL_NEVER); + } + + + /** + * @param childCount + * @param n + * @return 第n个位置的child 的绘制索引 + */ + @Override + protected int getChildDrawingOrder(int childCount, int n) { + if (n == 0 || childIndex.size() != childCount) { + childCenterXAbs.clear(); + childIndex.clear(); + int viewCenterX = getViewCenterX(this); + for (int i = 0; i < childCount; ++i) { + int indexAbs = Math.abs(viewCenterX - getViewCenterX(getChildAt(i))); + //两个距离相同,后来的那个做自增,从而保持abs不同 + if (childIndex.get(indexAbs) != null) { + ++indexAbs; + } + childCenterXAbs.add(indexAbs); + childIndex.append(indexAbs, i); + } + Collections.sort(childCenterXAbs);//1,0,2 0,1,2 + } + //那个item距离中心点远一些,就先draw它。(最近的就是中间放大的item,最后draw) + return childIndex.get(childCenterXAbs.get(childCount - 1 - n)); + } + + private int getViewCenterX(View view) { + int[] array = new int[2]; + view.getLocationOnScreen(array); + return array[0] + view.getWidth() / 2; + } +} \ No newline at end of file diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java new file mode 100644 index 0000000..0f479d2 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/LoopBean.java @@ -0,0 +1,11 @@ +package com.zhengsr.viewpagerhelper; + +/** + * Created by Administrator on 2017/11/9. + */ + +public class LoopBean { + public String url; + public int res; + public String text; +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java new file mode 100644 index 0000000..bc50c87 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainActivity.java @@ -0,0 +1,45 @@ +package com.zhengsr.viewpagerhelper; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.zhengsr.viewpagerhelper.activity.ArcActivity; +import com.zhengsr.viewpagerhelper.activity.loop.LoopActivity; +import com.zhengsr.viewpagerhelper.tab.TabActivity; + + +public class MainActivity extends AppCompatActivity { + private static final String TAG = "zsr"; + private static final int[] RES = {R.mipmap.guide1, R.mipmap.guide2, R.mipmap.guide3, + R.mipmap.guide4}; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + + } + + + + + public void loop_max(View view) { + startActivity(new Intent(this, LoopActivity.class)); + } + + public void fragment(View view) { + startActivity(new Intent(this, TabActivity.class)); + } + + + + public void arc(View view) { + startActivity(new Intent(this, ArcActivity.class)); + } + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java new file mode 100644 index 0000000..cee1223 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MainApplication.java @@ -0,0 +1,17 @@ +package com.zhengsr.viewpagerhelper; + +import android.app.Application; + + +/** + * Created by zhengshaorui + * time: 2018/9/16 + */ + +public class MainApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java new file mode 100644 index 0000000..32176bb --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/MyAppGlideModule.java @@ -0,0 +1,12 @@ +package com.zhengsr.viewpagerhelper; + +import com.bumptech.glide.annotation.GlideModule; +import com.bumptech.glide.module.AppGlideModule; + +/** + * Created by zhengshaorui + * time: 2018/9/16 + */ +@GlideModule +public class MyAppGlideModule extends AppGlideModule { +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java new file mode 100644 index 0000000..b6d20b1 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/ArcActivity.java @@ -0,0 +1,37 @@ +package com.zhengsr.viewpagerhelper.activity; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.view.ArcImageView; + + +public class ArcActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_arc); + + ArcImageView imageView = findViewById(R.id.image); + + Glide.with(this) + .load(R.mipmap.beauty1) + .into(imageView); + + /* imageView.arcHeight(50) + .blur(10) + .scaleFactor(1.2f) + .scaleX(400) + .scaleY(0) + .update();*/ + + + + + + } + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java new file mode 100644 index 0000000..3ba0a47 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ArcLoopActivity.java @@ -0,0 +1,62 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.indicator.CircleIndicator; +import com.zhengsr.viewpagerlib.view.ArcImageView; +import com.zhengsr.viewpagerlib.view.BannerViewPager; + +import java.util.ArrayList; +import java.util.List; + +public class ArcLoopActivity extends AppCompatActivity { + + private static final int[] RESID = { + R.mipmap.beauty1, + R.mipmap.beauty2, + R.mipmap.beauty3, + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_arc_loop); + initView(); + } + + private void initView() { + BannerViewPager bannerViewPager = findViewById(R.id.loop_viewpager_arc); + CircleIndicator indicator = findViewById(R.id.bottom_indicator); + List beans = new ArrayList<>(); + for (int i = 0; i < RESID.length; i++) { + ArcBean bean = new ArcBean(); + bean.resId = RESID[i]; + beans.add(bean); + } + + //添加 indicator + bannerViewPager.addIndicator(indicator); + + bannerViewPager.setPageListener(R.layout.arc_loop_layout, beans, new PageHelperListener() { + @Override + public void bindView(View view, ArcBean data, int position) { + ArcImageView imageView = view.findViewById(R.id.arc_icon); + Glide.with(view) + .load(data.resId) + .into(imageView); + } + }); + + + } + + class ArcBean { + public int resId; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java new file mode 100644 index 0000000..4d8d65e --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CardLoopActivity.java @@ -0,0 +1,65 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.view.BannerViewPager2; + +import java.util.ArrayList; +import java.util.List; + +public class CardLoopActivity extends AppCompatActivity { + + + String[] TEXT = new String[]{"1","2","3","4"}; + private BannerViewPager2 mBannerViewPager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_card_loop); + + initView(); + } + + private void initView() { + mBannerViewPager = findViewById(R.id.loop_viewpager_card); + + List beans = new ArrayList<>(); + for (int i = 0; i < TEXT.length; i++) { + CardBean bean = new CardBean(); + bean.msg = TEXT[i]; + beans.add(bean); + } + + mBannerViewPager.setCurrentPosition(1); + + + mBannerViewPager.setPageListener(R.layout.item_card, beans, new PageHelperListener() { + @Override + public void bindView(View view, CardBean data, int position) { + TextView textView = view.findViewById(R.id.item_card_tv); + textView.setText(data.msg); + } + }); + + } + + + class CardBean{ + public String msg; + } + + + + @Override + protected void onDestroy() { + super.onDestroy(); + mBannerViewPager.stopAnim(); + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java new file mode 100644 index 0000000..96fbfd4 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/CircleIndicatorActivity.java @@ -0,0 +1,162 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.bean.CirBean; +import com.zhengsr.viewpagerlib.bean.PageBean; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.indicator.CircleIndicator; +import com.zhengsr.viewpagerlib.type.BannerTransType; +import com.zhengsr.viewpagerlib.type.CircleIndicatorType; +import com.zhengsr.viewpagerlib.view.BannerViewPager2; + +import java.util.ArrayList; +import java.util.List; + +public class CircleIndicatorActivity extends AppCompatActivity { + private static final String TAG = "CircleIndicatorActivity"; + private static final int[] RESID = { + R.mipmap.beauty1, + R.mipmap.beauty2, + R.mipmap.beauty3, + }; + private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"}; + private List mDatas; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_mz_loop); + mDatas = new ArrayList<>(); + //配置数据,这里是resid和text + for (int i = 0; i < TEXT.length; i++) { + TestBean bean = new TestBean(); + bean.resId = RESID[i]; + bean.msg = TEXT[i]; + mDatas.add(bean); + } + + normal(); + cirToRect(); + circle(); + scale(); + + + } + + + private void normal(){ + BannerViewPager2 BannerViewPager2 = findViewById(R.id.normal_banner); + CircleIndicator indicator = findViewById(R.id.normal_indicator); + + BannerViewPager2.addIndicator(indicator); + BannerViewPager2.setCurrentPosition(1); + + showBanner(BannerViewPager2,indicator); + } + + private void cirToRect(){ + BannerViewPager2 BannerViewPager2 = findViewById(R.id.rect_banner); + CircleIndicator indicator = findViewById(R.id.rect_indicator); + + + showBanner(BannerViewPager2, indicator); + } + + private void circle(){ + BannerViewPager2 BannerViewPager2 = findViewById(R.id.move_banner); + CircleIndicator indicator = findViewById(R.id.move_indicator); + + BannerViewPager2.addIndicator(indicator); + + showBanner(BannerViewPager2,indicator); + } + + private void scale(){ + BannerViewPager2 BannerViewPager2 = findViewById(R.id.scale_banner); + CircleIndicator indicator = findViewById(R.id.scale_indicator); + + BannerViewPager2.setCurrentPosition(1); + CirBean cirBean = new CirBean(); + cirBean.type = CircleIndicatorType.SCALE; + cirBean.cirSize = 20; + cirBean.scaleFactor = 1.5f; + cirBean.horizonMargin = 40; + cirBean.normalColor = Color.GRAY; + cirBean.selectedColor = Color.WHITE; + + /** + * 配置 CircleIndicator 的自定义属性 + */ + indicator.addCirBean(cirBean); + + /** + * 配置 BannerViewPager2 的数据 + */ + PageBean bean = new PageBean(); + bean.isAutoLoop = true; + bean.smoothScrollTime = 400; + bean.loopTime = 5000; + bean.transFormer = BannerTransType.DEPATH; + + BannerViewPager2.addPageBean(bean) + .addIndicator(indicator); + + showBanner(BannerViewPager2,indicator); + + } + + + + private void showBanner(BannerViewPager2 BannerViewPager2, CircleIndicator indicator) { + BannerViewPager2.addIndicator(indicator); + + /** + * 设置监听即可,loop_layout 为要展示的内容,比如一个 ImageView,或者参考示例 + * 其中,setText 为模板方法,为了简便代码,当然还有其他一些方法,可查阅 PageHelperListener + * onItemClick 为点击事件,当然还有其他方法,重写即可,比如子控件事件 onItemChildClick,如果有子控件 + * 的点击事件,需要先在 bindView 中注册,比如 addChildrenClick(view,R.id.item_text,position), + * 其他一些方法,可查阅 PageHelperListener + */ + BannerViewPager2.setPageListener(R.layout.loop_layout, mDatas, new PageHelperListener() { + @Override + public void bindView(View view, final TestBean data, int position) { + setText(view, R.id.loop_text, data.msg); + + + //注册子控件事件 + //addChildrenClick(view,R.id.item_text,position); + + + ImageView imageView = view.findViewById(R.id.loop_icon); + Glide.with(view) + .load(data.resId) + .into(imageView); + } + + + + @Override + public void onItemClick(View view, TestBean data, int position) { + super.onItemClick(view, data, position); + Toast.makeText(CircleIndicatorActivity.this, data.msg+" "+position, Toast.LENGTH_SHORT).show(); + } + + + }); + } + + + class TestBean { + public int resId; + public String msg; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java new file mode 100644 index 0000000..3a746e8 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/LoopActivity.java @@ -0,0 +1,56 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; + +import com.zhengsr.viewpagerhelper.R; + + +public class LoopActivity extends AppCompatActivity { + private static final String TAG = "LoopActivity"; + + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_loop); + } + + + + + public void card(View view) { + startActivity(new Intent(this,CardLoopActivity.class)); + } + + public void circleIndicator(View view) { + startActivity(new Intent(this, CircleIndicatorActivity.class)); + } + + public void arc(View view) { + startActivity(new Intent(this,ArcLoopActivity.class)); + } + + + public void net(View view) { + startActivity(new Intent(this,NetWorkActivity.class)); + } + + public void rectIndicator(View view) { + startActivity(new Intent(this,RectIndicatorActivity.class)); + } + + public void recttext(View view) { + + startActivity(new Intent(this,TextIndicatorActivity.class)); + } + + public void scaleiamge(View view) { + startActivity(new Intent(this,ScaleImageActivity.class)); + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java new file mode 100644 index 0000000..6ae4225 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/NetWorkActivity.java @@ -0,0 +1,157 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.viewholder.BaseViewHolder; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerhelper.bean.ArticleData; +import com.zhengsr.viewpagerhelper.bean.BannerBean; +import com.zhengsr.viewpagerhelper.bean.BaseResponse; +import com.zhengsr.viewpagerhelper.bean.PageDataInfo; +import com.zhengsr.viewpagerhelper.rx.HttpCreate; +import com.zhengsr.viewpagerhelper.rx.RxUtils; +import com.zhengsr.viewpagerhelper.view.BannerView; + +import java.util.ArrayList; +import java.util.List; + +import io.reactivex.Observer; +import io.reactivex.disposables.Disposable; + +public class NetWorkActivity extends AppCompatActivity { + private static final String TAG = "NetWorkActivity"; + private static final String WANANDROID_BANNER = "https://www.wanandroid.com/banner/json"; + + private RecyclerView mRecyclerView; + private List mArticleBeans = new ArrayList<>(); + private ArticleAdapter mAdapter; + private BannerView mBannerView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_recyclerview); + initView(); + } + + private void initView() { + LinearLayoutManager manager = new LinearLayoutManager(this); + mRecyclerView = findViewById(R.id.recycler); + mRecyclerView.setLayoutManager(manager); + mAdapter = new ArticleAdapter(R.layout.item_article_recy_layout, mArticleBeans); + + mBannerView = new BannerView(this); + + mAdapter.addHeaderView(mBannerView); + mRecyclerView.setAdapter(mAdapter); + + loadData(); + + } + + public void update(View view) { + loadData(); + } + + private boolean isSecond; + private void loadData() { + //banner + + + + HttpCreate.getServer().getBanner() + .compose(RxUtils.>>rxScheduers()) + .compose(RxUtils.>handleResult()) + .subscribe(new Observer>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(List bannerBeans) { + + mBannerView.setData(bannerBeans); + mAdapter.notifyDataSetChanged(); + + + } + + @Override + public void onError(Throwable e) { + Log.d(TAG, "zsr - onError: "+e); + } + + @Override + public void onComplete() { + + } + }); + + + HttpCreate.getServer().getArticle(0) + .compose(RxUtils.>>>rxScheduers()) + .compose(RxUtils.>>handleResult()) + .subscribe(new Observer>>() { + @Override + public void onSubscribe(Disposable d) { + + } + + @Override + public void onNext(PageDataInfo> listPageDataInfo) { + mAdapter.setNewData(listPageDataInfo.getDatas()); + } + + @Override + public void onError(Throwable e) { + + } + + @Override + public void onComplete() { + + } + }); + + } + + + + + public class ArticleAdapter extends BaseQuickAdapter { + + + public ArticleAdapter(int layoutResId, @Nullable List data) { + super(layoutResId, data); + } + + + @Override + protected void convert(BaseViewHolder helper, ArticleData item) { + String msg; + if (!TextUtils.isEmpty(item.getSuperChapterName())){ + msg = item.getSuperChapterName()+"/"+item.getChapterName(); + }else{ + msg = item.getChapterName(); + } + String author = (item.getAuthor() != null && item.getAuthor().length() > 0) ? item.getAuthor():item.getShareUser(); + helper.setText(R.id.item_article_author,author) + .setText(R.id.item_article_chapat, msg) + .setText(R.id.item_article_title,item.getTitle()) + .setText(R.id.item_article_time,item.getNiceDate()); + + } + + + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java new file mode 100644 index 0000000..1a97371 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/RectIndicatorActivity.java @@ -0,0 +1,130 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.bean.PageBean; +import com.zhengsr.viewpagerlib.bean.RectBean; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.indicator.RectIndicator; +import com.zhengsr.viewpagerlib.type.BannerTransType; +import com.zhengsr.viewpagerlib.view.BannerViewPager; + +import java.util.ArrayList; +import java.util.List; + +public class RectIndicatorActivity extends AppCompatActivity { + private static final String TAG = "RectIndicatorActivity"; + private static final int[] RESID = { + R.mipmap.beauty1, + R.mipmap.beauty2, + R.mipmap.beauty3, + }; + private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"}; + private List mDatas; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_rect_inficator); + mDatas = new ArrayList<>(); + //配置数据,这里是resid和text + for (int i = 0; i < TEXT.length; i++) { + TestBean bean = new TestBean(); + bean.resId = RESID[i]; + bean.msg = TEXT[i]; + mDatas.add(bean); + } + + //todo viewpager 默认选中某个,indicator 可以点击 + + normal(); + config(); + + } + + + + private void normal(){ + BannerViewPager bannerViewPager = findViewById(R.id.normal_banner); + RectIndicator indicator = findViewById(R.id.normal_indicator); + + bannerViewPager.addIndicator(indicator); + + showBanner(bannerViewPager); + } + + + + + private void showBanner(BannerViewPager bannerViewPager) { + + bannerViewPager.setPageListener(R.layout.loop_layout, mDatas, new PageHelperListener() { + @Override + public void bindView(View view, final TestBean data, int position) { + setText(view, R.id.loop_text, data.msg); + ImageView imageView = view.findViewById(R.id.loop_icon); + Glide.with(view) + .load(data.resId) + .into(imageView); + } + + @Override + public void onItemClick(View view, TestBean data, int position) { + super.onItemClick(view, data, position); + Toast.makeText(RectIndicatorActivity.this, data.msg+" "+position, Toast.LENGTH_SHORT).show(); + } + }); + } + private void config() { + BannerViewPager bannerViewPager = findViewById(R.id.scale_banner); + RectIndicator indicator = findViewById(R.id.scale_indicator); + + RectBean rectBean = new RectBean(); + rectBean.horizonMargin = 30; + rectBean.normalColor = Color.GRAY; + rectBean.selectedColor = Color.WHITE; + rectBean.width = 30; + rectBean.height = 10; + rectBean.roundRadius = 5; + + /** + * 配置 CircleIndicator 的自定义属性 + */ + indicator.addRectBean(rectBean); + + /** + * 配置 BannerViewPager 的数据 + */ + PageBean bean = new PageBean(); + bean.isAutoLoop = true; + bean.smoothScrollTime = 400; + bean.loopTime = 5000; + bean.transFormer = BannerTransType.MZ; + + bannerViewPager.addPageBean(bean) + .addIndicator(indicator) + .setCurrentPosition(1); + + showBanner(bannerViewPager); + } + + class TestBean { + public int resId; + public String msg; + + @Override + public String toString() { + return "TestBean{" + + "resId=" + resId + + ", msg='" + msg + '\'' + + '}'; + } + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java new file mode 100644 index 0000000..a1ebe30 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/ScaleImageActivity.java @@ -0,0 +1,74 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.view.ScaleImageView; + +import java.util.ArrayList; +import java.util.List; + +public class ScaleImageActivity extends AppCompatActivity { + private int[] mRes = new int[]{ + R.mipmap.beauty1,R.mipmap.beauty2,R.mipmap.beauty3,R.mipmap.beauty4 + }; + private List mViews = new ArrayList<>(); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_scale_image); + + ScaleImageView imageView = findViewById(R.id.scaleimageview); + //配置参数 + imageView.autoScaleTime(5) + .limitBroad(false) + .doubleFactor(2) + .maxFactor(4) + .autoFit(true); + + ViewPager viewPager = findViewById(R.id.viewpager); + + for (int i = 0; i < mRes.length; i++) { + View view = LayoutInflater.from(this).inflate(R.layout.item_scaleview,null); + ScaleImageView scaleImageView = view.findViewById(R.id.scaleview); + scaleImageView.setImageResource(mRes[i]); + mViews.add(view); + } + viewPager.setAdapter(new ImageAdapter()); + } + + + class ImageAdapter extends PagerAdapter { + + @Override + public int getCount() { + return mViews.size(); + } + @Override + // 每次滑动时销毁当前组件 + public void destroyItem(ViewGroup container, int position, Object object) { + //super.destroyItem(container, position, object); + container.removeView(mViews.get(position)); + } + // 每次滑动时,创建当前组件 + @Override + public Object instantiateItem(ViewGroup container, int position) { + container.addView(mViews.get(position)); + return mViews.get(position); + } + + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { + return view==o; + } + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java new file mode 100644 index 0000000..cbcdd48 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/activity/loop/TextIndicatorActivity.java @@ -0,0 +1,62 @@ +package com.zhengsr.viewpagerhelper.activity.loop; + +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.indicator.TextIndicator; +import com.zhengsr.viewpagerlib.view.BannerViewPager; + +import java.util.ArrayList; +import java.util.List; + +public class TextIndicatorActivity extends AppCompatActivity { + private static final int[] RESID = { + R.mipmap.beauty1, + R.mipmap.beauty2, + R.mipmap.beauty3, + }; + private static final String[] TEXT = {"图像处理", "LSB开发", "游戏开发"}; + private List mDatas; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_text_indicator); + mDatas = new ArrayList<>(); + //配置数据,这里是resid和text + for (int i = 0; i < TEXT.length; i++) { + TestBean bean = new TestBean(); + bean.resId = RESID[i]; + bean.msg = TEXT[i]; + mDatas.add(bean); + } + BannerViewPager bannerViewPager = findViewById(R.id.normal_banner); + TextIndicator indicator = findViewById(R.id.normal_indicator); + + bannerViewPager.addIndicator(indicator); + bannerViewPager.setCurrentPosition(1); + + bannerViewPager.setPageListener(R.layout.image_layout, mDatas, new PageHelperListener() { + @Override + public void bindView(View view, TestBean data, int position) { + + ImageView imageView = view.findViewById(R.id.icon); + Glide.with(view) + .load(data.resId) + .into(imageView); + } + }); + + + } + + class TestBean { + public int resId; + public String msg; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java new file mode 100644 index 0000000..811f8db --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseAdapter.java @@ -0,0 +1,63 @@ +package com.zhengsr.viewpagerhelper.adapter; + +import android.view.View; +import android.view.ViewGroup; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +/** + * Created by zhengshaorui on 2018/4/13. + */ +public abstract class RBaseAdapter extends RecyclerView.Adapter { + private int mLayoutId; + private List mDatas; //取泛型是因为不知道bean是啥类型的。 + private int mWidth; + + private RBaseViewholder mViewholder; + + public RBaseAdapter(int layoutid,List list) { + mLayoutId = layoutid; + mDatas = list; + } + public interface onItemClickListener{ + void onItemClick(View view, int position); + } + private onItemClickListener mOnItemClickListener; + public void setonItemClickListener(onItemClickListener listener){ + mOnItemClickListener = listener; + } + + + @Override + public RBaseViewholder onCreateViewHolder(ViewGroup parent, int viewType) { + mViewholder = RBaseViewholder.getViewHolder(parent.getContext(), + mLayoutId,parent); + return mViewholder; + } + + @Override + public void onBindViewHolder(RBaseViewholder holder, int position) { + if (mOnItemClickListener != null){ + final int pos = position; + holder.getConserView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mOnItemClickListener.onItemClick(v,pos); + } + }); + + } + getConver(holder,mDatas.get(position)); //提供 viewholder 出去,数据由用户处理 + } + + public abstract void getConver(RBaseViewholder holder,T data); + + //edit by fang + @Override + public int getItemCount() { + return mDatas!=null?mDatas.size():0; + } + //end +} \ No newline at end of file diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java new file mode 100644 index 0000000..c173be5 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/adapter/RBaseViewholder.java @@ -0,0 +1,82 @@ +package com.zhengsr.viewpagerhelper.adapter; + +import android.content.Context; +import android.util.SparseArray; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + + +/** + * Created by zhengshaorui on 2018/4/13. + */ +public class RBaseViewholder extends RecyclerView.ViewHolder { + private static final String TAG = "RBaseViewholder"; + private SparseArray mViewSparseArray; //用来保存 itemview; + private View mConserView; + public RBaseViewholder(View itemView) { + super(itemView); + mViewSparseArray = new SparseArray<>(); + mConserView = itemView; + } + + /** + * 这里相当于在 oncreateViewholder 中,设置好数据,然后返回 + * 可以在这里设置宽度,这样就可以动态居中了 + * @param context + * @param layoutid + * @param parent + * @return + */ + public static RBaseViewholder getViewHolder(Context context, int layoutid, ViewGroup parent){ + View view = LayoutInflater.from(context).inflate(layoutid,parent,false); + RBaseViewholder viewholder = new RBaseViewholder(view); + return viewholder; + } + + + public View getConserView(){ + return mConserView; + } + + + /** + * getItemview,通过 id获取view + * @param resId + * @return + */ + public T getItemView(int resId){ + View view = mViewSparseArray.get(resId); + if (view == null){ + view = mConserView.findViewById(resId); + mViewSparseArray.put(resId,view); + } + return (T) view; + } + + /** + * 设置数据,直接通过id获取到view,然后设置数据 + * @param viewId + * @param data + * @return + */ + public RBaseViewholder setText(int viewId,String data){ + TextView textView = (TextView) getItemView(viewId); + textView.setText(data); + return this; + } + public RBaseViewholder setDrawable(int viewId,int resId){ + ImageView imageView = (ImageView) getItemView(viewId); + imageView.setBackgroundResource(resId); + return this; + } + + public void onItemClickListener(View v,int position){}; + + + +} \ No newline at end of file diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java new file mode 100644 index 0000000..bfccc48 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/ArticleData.java @@ -0,0 +1,304 @@ +package com.zhengsr.viewpagerhelper.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * @author by zhengshaorui on 2019/10/8 + * Describe: + */ +public class ArticleData implements Serializable { + /** + * apkLink : + * audit : 1 + * author : + * chapterId : 505 + * chapterName : LeakCanary + * collect : false + * courseId : 13 + * desc : + * envelopePic : + * fresh : true + * id : 10381 + * link : https://juejin.im/post/5a9d46d2f265da237d0280a3 + * niceDate : 9小时前 + * niceShareDate : 20小时前 + * origin : + * prefix : + * projectLink : + * publishTime : 1574180460000 + * selfVisible : 0 + * shareDate : 1574139942000 + * shareUser : 秉心说 + * superChapterId : 461 + * superChapterName : 常见开源库源码解析 + * tags : [] + * title : LeakCanary 源码解析 + * type : 0 + * userId : 22057 + * visible : 1 + * zan : 0 + */ + + private String apkLink; + private int audit; + private String author; + private int chapterId; + private String chapterName; + private boolean collect; + private int courseId; + private String desc; + private String envelopePic; + private boolean fresh; + private int id; + private String link; + private String niceDate; + private String niceShareDate; + private String origin; + private String prefix; + private String projectLink; + private long publishTime; + private int selfVisible; + private long shareDate; + private String shareUser; + private int superChapterId; + private String superChapterName; + private String title; + private int type; + private int userId; + private int visible; + private int zan; + private List tags; + + public String getApkLink() { + return apkLink; + } + + public void setApkLink(String apkLink) { + this.apkLink = apkLink; + } + + public int getAudit() { + return audit; + } + + public void setAudit(int audit) { + this.audit = audit; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public int getChapterId() { + return chapterId; + } + + public void setChapterId(int chapterId) { + this.chapterId = chapterId; + } + + public String getChapterName() { + return chapterName; + } + + public void setChapterName(String chapterName) { + this.chapterName = chapterName; + } + + public boolean isCollect() { + return collect; + } + + public void setCollect(boolean collect) { + this.collect = collect; + } + + public int getCourseId() { + return courseId; + } + + public void setCourseId(int courseId) { + this.courseId = courseId; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getEnvelopePic() { + return envelopePic; + } + + public void setEnvelopePic(String envelopePic) { + this.envelopePic = envelopePic; + } + + public boolean isFresh() { + return fresh; + } + + public void setFresh(boolean fresh) { + this.fresh = fresh; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getLink() { + return link; + } + + public void setLink(String link) { + this.link = link; + } + + public String getNiceDate() { + return niceDate; + } + + public void setNiceDate(String niceDate) { + this.niceDate = niceDate; + } + + public String getNiceShareDate() { + return niceShareDate; + } + + public void setNiceShareDate(String niceShareDate) { + this.niceShareDate = niceShareDate; + } + + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + public String getPrefix() { + return prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + public String getProjectLink() { + return projectLink; + } + + public void setProjectLink(String projectLink) { + this.projectLink = projectLink; + } + + public long getPublishTime() { + return publishTime; + } + + public void setPublishTime(long publishTime) { + this.publishTime = publishTime; + } + + public int getSelfVisible() { + return selfVisible; + } + + public void setSelfVisible(int selfVisible) { + this.selfVisible = selfVisible; + } + + public long getShareDate() { + return shareDate; + } + + public void setShareDate(long shareDate) { + this.shareDate = shareDate; + } + + public String getShareUser() { + return shareUser; + } + + public void setShareUser(String shareUser) { + this.shareUser = shareUser; + } + + public int getSuperChapterId() { + return superChapterId; + } + + public void setSuperChapterId(int superChapterId) { + this.superChapterId = superChapterId; + } + + public String getSuperChapterName() { + return superChapterName; + } + + public void setSuperChapterName(String superChapterName) { + this.superChapterName = superChapterName; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getVisible() { + return visible; + } + + public void setVisible(int visible) { + this.visible = visible; + } + + public int getZan() { + return zan; + } + + public void setZan(int zan) { + this.zan = zan; + } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java new file mode 100644 index 0000000..1bc4eff --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BannerBean.java @@ -0,0 +1,95 @@ +package com.zhengsr.viewpagerhelper.bean; + +/** + * Created by zhengshaorui + * time: 2018/9/1 + */ + +public class BannerBean { + private String desc; + private int id; + private String imagePath; + private int isVisible; + private int order; + private String title; + private int type; + private String url; + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getImagePath() { + return imagePath; + } + + public void setImagePath(String imagePath) { + this.imagePath = imagePath; + } + + public int getIsVisible() { + return isVisible; + } + + public void setIsVisible(int isVisible) { + this.isVisible = isVisible; + } + + public int getOrder() { + return order; + } + + public void setOrder(int order) { + this.order = order; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + @Override + public String toString() { + return "BannerBean{" + + "desc='" + desc + '\'' + + ", id=" + id + + ", imagePath='" + imagePath + '\'' + + ", isVisible=" + isVisible + + ", order=" + order + + ", title='" + title + '\'' + + ", type=" + type + + ", url='" + url + '\'' + + '}'; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java new file mode 100644 index 0000000..888265b --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/BaseResponse.java @@ -0,0 +1,42 @@ +package com.zhengsr.viewpagerhelper.bean; + +public class BaseResponse { + //自行去定义 + public static final int SUCCESS = 0; + private T data; + private int errorCode; + private String errorMsg; + + public T getData() { + return data; + } + + public int getErrorCode() { + return errorCode; + } + + public String getErrorMsg() { + return errorMsg; + } + + public void setData(T data) { + this.data = data; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public void setErrorMsg(String errorMsg) { + this.errorMsg = errorMsg; + } + + @Override + public String toString() { + return "BaseResponse{" + + "data=" + data + + ", errorCode=" + errorCode + + ", errorMsg='" + errorMsg + '\'' + + '}'; + } +} \ No newline at end of file diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java new file mode 100644 index 0000000..6b12003 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/bean/PageDataInfo.java @@ -0,0 +1,82 @@ +package com.zhengsr.viewpagerhelper.bean; + +/** + * @author by zhengshaorui on 2019/10/8 + * Describe: + */ +public class PageDataInfo { + /** + * curPage : 1 + * datas : [] + * offset : 0 + * over : false + * pageCount : 377 + * size : 20 + * total : 7522 + */ + private int curPage; + private int offset; + private boolean over; + private int pageCount; + private int size; + private int total; + private T datas; + + public int getCurPage() { + return curPage; + } + + public void setCurPage(int curPage) { + this.curPage = curPage; + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } + + public boolean isOver() { + return over; + } + + public void setOver(boolean over) { + this.over = over; + } + + public int getPageCount() { + return pageCount; + } + + public void setPageCount(int pageCount) { + this.pageCount = pageCount; + } + + public int getSize() { + return size; + } + + public void setSize(int size) { + this.size = size; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public T getDatas() { + return datas; + } + + public void setDatas(T datas) { + this.datas = datas; + } + + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java new file mode 100644 index 0000000..409e6f2 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/fragment/CusFragment.java @@ -0,0 +1,52 @@ +package com.zhengsr.viewpagerhelper.fragment; + +import android.os.Bundle; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +/** + * Created by Administrator on 2017/11/10. + */ + +public class CusFragment extends Fragment { + + public static final String ARGUMENT = "argument"; + private String mTitle; + + + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + Bundle bundle = getArguments(); + + TextView textView = new TextView(getActivity()); + if (bundle != null){ + textView.setText(bundle.getString(ARGUMENT)); + }else{ + textView.setText("nothing here"); + } + textView.setTextSize(30); + textView.setGravity(Gravity.CENTER); + return textView; + } + + /** + * 弄一个静态工厂的方法调用 用于传参 + * @param key + * @return + */ + public static CusFragment newInStance(String key){ + CusFragment fragment = new CusFragment(); + Bundle bundle = new Bundle(); + bundle.putString(ARGUMENT,key); + fragment.setArguments(bundle); + return fragment; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java new file mode 100644 index 0000000..21ff307 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpCreate.java @@ -0,0 +1,41 @@ +package com.zhengsr.viewpagerhelper.rx; + + +import java.util.concurrent.TimeUnit; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.fastjson.FastJsonConverterFactory; +import retrofit2.converter.scalars.ScalarsConverterFactory; + +/** + * @author by zhengshaorui on 2019/10/9 + * Describe: 网络生成类 + */ +public class HttpCreate { + + public static HttpServerApi getServer(){ + Retrofit retrofit = new Retrofit.Builder() + //这里采用这个,因为有多个baseurl + .baseUrl("https://www.wanandroid.com/") + //转字符串 + .addConverterFactory(ScalarsConverterFactory.create()) + //fastjson + .addConverterFactory(FastJsonConverterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .client(OkHttpHolder.BUILDER) + .build(); + return retrofit.create(HttpServerApi.class); + } + + /** + * 配置okhttp3 client + */ + + private static class OkHttpHolder{ + static OkHttpClient BUILDER = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .build(); + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java new file mode 100644 index 0000000..ca1c3cc --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/HttpServerApi.java @@ -0,0 +1,43 @@ +package com.zhengsr.viewpagerhelper.rx; + + +import com.zhengsr.viewpagerhelper.bean.ArticleData; +import com.zhengsr.viewpagerhelper.bean.BannerBean; +import com.zhengsr.viewpagerhelper.bean.BaseResponse; +import com.zhengsr.viewpagerhelper.bean.PageDataInfo; + +import java.util.List; + +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Path; +import retrofit2.http.Url; + +/** + * @author by zhengshaorui on 2019/10/9 + * Describe: 统一网络服务接口类 + */ +public interface HttpServerApi { + @GET + Observable getJson(@Url String url); + + + /** + * https://www.wanandroid.com/banner/json + * 获取 Banner 数据 + * @return + */ + @GET("banner/json") + Observable>> getBanner(); + + /** + * 获取文章 + * https://www.wanandroid.com/article/list/num/json + * @param num 页码 + * @return + */ + @GET("article/list/{num}/json") + Observable>>> getArticle(@Path("num") int num); + + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java new file mode 100644 index 0000000..e56a716 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/rx/RxUtils.java @@ -0,0 +1,98 @@ +package com.zhengsr.viewpagerhelper.rx; + + + + + +import com.zhengsr.viewpagerhelper.bean.BaseResponse; + +import org.reactivestreams.Publisher; + +import io.reactivex.Flowable; +import io.reactivex.FlowableTransformer; +import io.reactivex.Observable; +import io.reactivex.ObservableEmitter; +import io.reactivex.ObservableOnSubscribe; +import io.reactivex.ObservableSource; +import io.reactivex.ObservableTransformer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Function; +import io.reactivex.schedulers.Schedulers; + +/** + * @author by zhengshaorui on 2019/10/9 + * Describe: + */ +public class RxUtils { + /** + * 封装线程调度 + * @param + * @return + */ + public static ObservableTransformer rxScheduers(){ + return new ObservableTransformer(){ + + @Override + public ObservableSource apply(Observable upstream) { + return upstream.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + }; + } + + + public static FlowableTransformer flScheduers(){ + return new FlowableTransformer() { + @Override + public Publisher apply(Flowable upstream) { + return upstream.subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); + } + }; + } + + + + + /** + * 得到 Observable + * @param 指定的泛型类型 + * @return Observable + */ + private static Observable createData(final T t) { + return Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + emitter.onNext(t); + emitter.onComplete(); + } + }); + } + + /** + * 统一返回结果处理 + * @param 指定的泛型类型 + * @return ObservableTransformer + */ + public static ObservableTransformer, T> handleResult() { + + return new ObservableTransformer, T>() { + @Override + public ObservableSource apply(Observable> upstream) { + return upstream.flatMap(new Function, ObservableSource>() { + @Override + public ObservableSource apply(BaseResponse baseResponse) throws Exception { + if (baseResponse.getErrorCode() == BaseResponse.SUCCESS + && baseResponse.getData() != null + ) { + return createData(baseResponse.getData()); + } else { + return Observable.error(new Exception(baseResponse.getErrorMsg())); + } + } + }); + + } + }; + } +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java new file mode 100644 index 0000000..babb5f4 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/ColorTabActivity.java @@ -0,0 +1,66 @@ +package com.zhengsr.viewpagerhelper.tab; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerhelper.fragment.CusFragment; +import com.zhengsr.viewpagerlib.indicator.TabIndicator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ColorTabActivity extends AppCompatActivity { + private List mFragments = new ArrayList<>(); + private List mTitle = Arrays.asList("新闻","娱乐","学习", + "新闻","娱乐","学习", + "新闻","娱乐","学习"); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_colortab_page); + + for (String string : mTitle) { + CusFragment fragment = CusFragment.newInStance(string); + mFragments.add(fragment); + } + final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); + TabIndicator tritabIndecator = (TabIndicator) findViewById(R.id.line_indicator); + viewPager.setAdapter(new CusAdapter(getSupportFragmentManager())); + // tritabIndecator.setTabData(viewPager,mTitle); + tritabIndecator.setViewPagerSwitchSpeed(viewPager,600); + tritabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() { + @Override + public void onClick(int position) { + viewPager.setCurrentItem(position); + } + }); + + + } + + + class CusAdapter extends FragmentPagerAdapter { + + public CusAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } + + @Override + public int getCount() { + return mFragments.size(); + } + } + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java new file mode 100644 index 0000000..1f6c352 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/RectTabActivity.java @@ -0,0 +1,67 @@ +package com.zhengsr.viewpagerhelper.tab; + +import android.os.Bundle; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerhelper.fragment.CusFragment; +import com.zhengsr.viewpagerlib.indicator.TabIndicator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class RectTabActivity extends AppCompatActivity { + private List mFragments = new ArrayList<>(); + private List mTitle = Arrays.asList("新闻","娱乐","学习", + "Java","Android","Python", + "天才","蠢材","庸才"); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_recttab_page); + + for (String string : mTitle) { + CusFragment fragment = CusFragment.newInStance(string); + mFragments.add(fragment); + } + final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); + TabIndicator tritabIndecator = (TabIndicator) findViewById(R.id.line_indicator); + viewPager.setAdapter(new CusAdapter(getSupportFragmentManager())); + tritabIndecator.setViewPagerSwitchSpeed(viewPager,600); + // 使用这个方法,则使用xml里面的控件 + //tritabIndecator.setTabData(viewPager,new TabIndicator.TabClickListener() + tritabIndecator.setTabData(viewPager, mTitle,new TabIndicator.TabClickListener() { + @Override + public void onClick(int position) { + viewPager.setCurrentItem(position); + } + }); + + + } + + + class CusAdapter extends FragmentPagerAdapter { + + public CusAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } + + @Override + public int getCount() { + return mFragments.size(); + } + } + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java new file mode 100644 index 0000000..e4097e1 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TabActivity.java @@ -0,0 +1,42 @@ +package com.zhengsr.viewpagerhelper.tab; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; + + +import com.zhengsr.viewpagerhelper.R; + +import java.util.ArrayList; +import java.util.List; + +public class TabActivity extends AppCompatActivity { + private List mFragments = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fragment_page); + + + + } + + public void tri(View view) { + startActivity(new Intent(this,TriTabActivity.class)); + } + + public void rect(View view) { + startActivity(new Intent(this,RectTabActivity.class)); + } + + public void color(View view) { + startActivity(new Intent(this,ColorTabActivity.class)); + } + + + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java new file mode 100644 index 0000000..9493766 --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/tab/TriTabActivity.java @@ -0,0 +1,67 @@ +package com.zhengsr.viewpagerhelper.tab; + +import android.os.Bundle; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerhelper.fragment.CusFragment; +import com.zhengsr.viewpagerlib.indicator.TabIndicator; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class TriTabActivity extends AppCompatActivity { + private List mFragments = new ArrayList<>(); + private List mTitle = Arrays.asList("新闻","娱乐","学习"); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_tritab_page); + + for (String string : mTitle) { + CusFragment fragment = CusFragment.newInStance(string); + mFragments.add(fragment); + } + final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); + viewPager.setAdapter(new CusAdapter(getSupportFragmentManager())); + + TabIndicator tabIndecator = (TabIndicator) findViewById(R.id.line_indicator); + //设置viewpager滑动速度 + tabIndecator.setViewPagerSwitchSpeed(viewPager,600); + tabIndecator.setTabData(viewPager,mTitle, new TabIndicator.TabClickListener() { + @Override + public void onClick(int position) { + //顶部点击的方法公布出来 + viewPager.setCurrentItem(position); + } + }); + + + } + + + class CusAdapter extends FragmentPagerAdapter { + + public CusAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + return mFragments.get(position); + } + + @Override + public int getCount() { + return mFragments.size(); + } + } + +} diff --git a/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java b/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java new file mode 100644 index 0000000..e00881c --- /dev/null +++ b/appx/src/main/java/com/zhengsr/viewpagerhelper/view/BannerView.java @@ -0,0 +1,73 @@ +package com.zhengsr.viewpagerhelper.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.bumptech.glide.Glide; +import com.zhengsr.viewpagerhelper.R; +import com.zhengsr.viewpagerhelper.bean.BannerBean; +import com.zhengsr.viewpagerlib.callback.PageHelperListener; +import com.zhengsr.viewpagerlib.indicator.CircleIndicator; +import com.zhengsr.viewpagerlib.view.BannerViewPager; + +import java.util.List; + +/** + * Created by zhengshaorui + * time: 2018/9/2 + */ + +public class BannerView extends FrameLayout { + + + private View mView; + private BannerViewPager mBannerViewPager; + + public BannerView(@NonNull Context context) { + this(context,null); + } + + public BannerView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + + removeAllViews(); + mView = LayoutInflater.from(getContext()).inflate(R.layout.banner_layout,this,false); + addView(mView); + + mBannerViewPager = mView.findViewById(R.id.banner); + CircleIndicator indicator = mView.findViewById(R.id.banner_indicator); + + mBannerViewPager.setCurrentPosition(1); + + mBannerViewPager.addIndicator(indicator); + } + + + public void setData(List beans){ + if (beans != null && beans.size() >0){ + + mBannerViewPager.setPageListener(R.layout.banner_item_layout, beans, new PageHelperListener() { + @Override + public void bindView(View view, BannerBean data, int position) { + // setText(view,R.id.banner_text,data.getTitle()); + ImageView imageView = view.findViewById(R.id.banner_icon); + Glide.with(getContext()) + .load(data.getImagePath()) + .into(imageView); + } + }); + + } + } + + + + +} diff --git a/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml b/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/appx/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/bottom_circle.xml b/appx/src/main/res/drawable/bottom_circle.xml new file mode 100644 index 0000000..342d53e --- /dev/null +++ b/appx/src/main/res/drawable/bottom_circle.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/card_shape.xml b/appx/src/main/res/drawable/card_shape.xml new file mode 100644 index 0000000..644465f --- /dev/null +++ b/appx/src/main/res/drawable/card_shape.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/glide_bottom_btn_bg.xml b/appx/src/main/res/drawable/glide_bottom_btn_bg.xml new file mode 100644 index 0000000..8d43d9f --- /dev/null +++ b/appx/src/main/res/drawable/glide_bottom_btn_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/glide_bottom_selector.xml b/appx/src/main/res/drawable/glide_bottom_selector.xml new file mode 100644 index 0000000..150e468 --- /dev/null +++ b/appx/src/main/res/drawable/glide_bottom_selector.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/ic_launcher_background.xml b/appx/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/appx/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/appx/src/main/res/drawable/select_tag.xml b/appx/src/main/res/drawable/select_tag.xml new file mode 100644 index 0000000..880141f --- /dev/null +++ b/appx/src/main/res/drawable/select_tag.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/shape_back_ff_.xml b/appx/src/main/res/drawable/shape_back_ff_.xml new file mode 100644 index 0000000..2bdd7b4 --- /dev/null +++ b/appx/src/main/res/drawable/shape_back_ff_.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/shape_search.xml b/appx/src/main/res/drawable/shape_search.xml new file mode 100644 index 0000000..37a88d5 --- /dev/null +++ b/appx/src/main/res/drawable/shape_search.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/drawable/shape_search_select.xml b/appx/src/main/res/drawable/shape_search_select.xml new file mode 100644 index 0000000..d5370aa --- /dev/null +++ b/appx/src/main/res/drawable/shape_search_select.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/appx/src/main/res/layout/activity_arc.xml b/appx/src/main/res/layout/activity_arc.xml new file mode 100644 index 0000000..f89d789 --- /dev/null +++ b/appx/src/main/res/layout/activity_arc.xml @@ -0,0 +1,43 @@ + + + + + + + + + + diff --git a/appx/src/main/res/layout/activity_arc_loop.xml b/appx/src/main/res/layout/activity_arc_loop.xml new file mode 100644 index 0000000..be3b75f --- /dev/null +++ b/appx/src/main/res/layout/activity_arc_loop.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + diff --git a/appx/src/main/res/layout/activity_card_loop.xml b/appx/src/main/res/layout/activity_card_loop.xml new file mode 100644 index 0000000..75a526d --- /dev/null +++ b/appx/src/main/res/layout/activity_card_loop.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + diff --git a/appx/src/main/res/layout/activity_colortab_page.xml b/appx/src/main/res/layout/activity_colortab_page.xml new file mode 100644 index 0000000..3f4a7d7 --- /dev/null +++ b/appx/src/main/res/layout/activity_colortab_page.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/appx/src/main/res/layout/activity_fragment_page.xml b/appx/src/main/res/layout/activity_fragment_page.xml new file mode 100644 index 0000000..36e33f5 --- /dev/null +++ b/appx/src/main/res/layout/activity_fragment_page.xml @@ -0,0 +1,32 @@ + + + + +