├── .gitignore ├── .idea ├── gradle.xml ├── misc.xml ├── modules.xml └── runConfigurations.xml ├── README.md ├── RELEASE-NOTES.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── h6ah4i │ │ └── android │ │ └── example │ │ └── scrollableviewpagercontent │ │ ├── MainActivity.java │ │ └── contents │ │ ├── ListViewContentFragment.java │ │ ├── NestedScrollViewContentFragment.java │ │ └── RecyclerViewContentFragment.java │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ └── ic_launcher_background.xml │ ├── layout │ ├── activity_main.xml │ ├── include_view_pager.xml │ ├── page_fragment_list_view.xml │ ├── page_fragment_nested_scroll_view.xml │ ├── page_fragment_normal_list_view.xml │ ├── page_fragment_normal_nested_scroll_view.xml │ └── page_fragment_recycler_view.xml │ ├── menu │ └── appmenu.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── images └── capture.gif ├── library-listview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── h6ah4i │ └── android │ └── scrollableviewpagercontent │ └── listview │ └── ViewPagerContentListView.java ├── library-nestedscrollview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── h6ah4i │ └── android │ └── scrollableviewpagercontent │ └── nestedscrollview │ └── ViewPagerContentNestedScrollView.java ├── library-recyclerview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── h6ah4i │ └── android │ └── scrollableviewpagercontent │ └── recyclerview │ └── ViewPagerContentRecyclerViewTouchEventInterceptor.java ├── library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── h6ah4i │ └── android │ └── scrollableviewpagercontent │ └── ScrollableViewPagerContentTouchEventDelegator.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 31 | 32 | 33 | 34 | 35 | 36 | 38 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ScrollableViewPagerContent 2 | =============== 3 | 4 | [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.h6ah4i.android.scrollableviewpagercontent/scrollableviewpagercontent/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.h6ah4i.android.scrollableviewpagercontent/scrollableviewpagercontent) 5 | 6 | 7 | A tiny library which improves UX with ViewPager. This library prioritizes ViewPager's horizontal swipe action over vertical scroll of inner pager contents. 8 | 9 | In the standard behavior of Android's ViewPager, paging swipe action of ViewPager has less priority than inner views' vertical scroll. When inner content is in scrolling state, horizontal swipe is completely ignored. However the behavior is considered bad for UX, and that's why I created this library. 10 | 11 | Also, I noticed that some major apps implemented the same behavior. (*NOTE: These are not using this library.*) 12 | 13 | - Play Store app 14 | - Official Twitter client 15 | - Mercari 16 | 17 | 18 | ![Demo app](./images/capture.gif) 19 | 20 | Usage 21 | --- 22 | 23 | ### 1. Add the following line(s) to `build.gradle` 24 | 25 | ```gradle 26 | // the core module 27 | implementation 'com.h6ah4i.android.scrollableviewpagercontent:scrollableviewpagercontent:1.0.0' 28 | 29 | // if you are using RecyclerView, add this too 30 | implementation 'com.h6ah4i.android.scrollableviewpagercontent:scrollableviewpagercontent-recyclerview:1.0.0' 31 | 32 | // if you are using NestedScrollView, add this too 33 | implementation 'com.h6ah4i.android.scrollableviewpagercontent:scrollableviewpagercontent-nestedscrollview:1.0.0' 34 | 35 | // if you are using ListView, add this too 36 | implementation 'com.h6ah4i.android.scrollableviewpagercontent:scrollableviewpagercontent-listview:1.0.0' 37 | 38 | ``` 39 | 40 | ### 2-A. If using a `RecyclerView` for the `ViewPager` content 41 | 42 | ```java 43 | RecyclerView rv = ...; 44 | rv.addOnItemTouchListener(new ViewPagerContentRecyclerViewTouchEventInterceptor()); 45 | ``` 46 | 47 | 48 | ### 2-B. If using a `NestedScrollView` for the `ViewPager` content 49 | 50 | ```diff 51 | - ... 52 | + ... 53 | 54 | ``` 55 | 56 | 57 | ### 2-C. If using a `ListView` for the `ViewPager` content 58 | 59 | ```diff 60 | - ... 61 | + ... 62 | 63 | ``` 64 | 65 | 66 | License 67 | --- 68 | 69 | This library is licensed under the [Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). 70 | 71 | See [`LICENSE`](LICENSE) for full of the license text. 72 | 73 | Copyright (C) 2018 Haruki Hasegawa 74 | 75 | Licensed under the Apache License, Version 2.0 (the "License"); 76 | you may not use this file except in compliance with the License. 77 | You may obtain a copy of the License at 78 | 79 | http://www.apache.org/licenses/LICENSE-2.0 80 | 81 | Unless required by applicable law or agreed to in writing, software 82 | distributed under the License is distributed on an "AS IS" BASIS, 83 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 84 | See the License for the specific language governing permissions and 85 | limitations under the License. 86 | -------------------------------------------------------------------------------- /RELEASE-NOTES.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Migrate to AndroidX 4 | 5 | ## 0.1.2 6 | 7 | - Fix uploadName to correct multi-module library publishing 8 | 9 | ## 0.1.1 10 | 11 | - Changed package group ID 12 | 13 | ## 0.1.0 14 | 15 | - Initial release 16 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.COMPILE_SDK_VERSION 5 | defaultConfig { 6 | applicationId "com.h6ah4i.android.example.scrollableviewpagercontent" 7 | minSdkVersion rootProject.ext.MIN_SDK_VERSION 8 | targetSdkVersion rootProject.ext.TARGET_SDK_VERSION 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation fileTree(dir: 'libs', include: ['*.jar']) 23 | implementation 'androidx.appcompat:appcompat:1.0.0' 24 | implementation 'com.google.android.material:material:1.0.0' 25 | implementation 'androidx.recyclerview:recyclerview:1.0.0' 26 | implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2' 27 | implementation project(':scrollableviewpagercontent') 28 | implementation project(':scrollableviewpagercontent-recyclerview') 29 | implementation project(':scrollableviewpagercontent-listview') 30 | implementation project(':scrollableviewpagercontent-nestedscrollview') 31 | testImplementation 'junit:junit:4.12' 32 | androidTestImplementation 'androidx.test:runner:1.1.0-alpha4' 33 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4' 34 | } 35 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/h6ah4i/android/example/scrollableviewpagercontent/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.h6ah4i.android.example.scrollableviewpagercontent; 2 | 3 | import android.os.Bundle; 4 | import android.view.Menu; 5 | import android.view.MenuItem; 6 | import android.widget.CompoundButton; 7 | 8 | import com.google.android.material.tabs.TabLayout; 9 | import com.h6ah4i.android.example.scrollableviewpagercontent.contents.ListViewContentFragment; 10 | import com.h6ah4i.android.example.scrollableviewpagercontent.contents.NestedScrollViewContentFragment; 11 | import com.h6ah4i.android.example.scrollableviewpagercontent.contents.RecyclerViewContentFragment; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | import androidx.annotation.Nullable; 17 | import androidx.appcompat.app.AppCompatActivity; 18 | import androidx.appcompat.widget.SwitchCompat; 19 | import androidx.appcompat.widget.Toolbar; 20 | import androidx.core.util.Pair; 21 | import androidx.fragment.app.Fragment; 22 | import androidx.fragment.app.FragmentManager; 23 | import androidx.fragment.app.FragmentStatePagerAdapter; 24 | import androidx.viewpager.widget.ViewPager; 25 | 26 | public class MainActivity extends AppCompatActivity { 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_main); 32 | setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); 33 | 34 | setupPager(true); 35 | } 36 | 37 | private void setupPager(boolean enabled) { 38 | MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), enabled); 39 | 40 | TabLayout tabs = findViewById(R.id.tabs); 41 | ViewPager pager = findViewById(R.id.viewpager); 42 | pager.setAdapter(null); 43 | pager.setAdapter(pagerAdapter); 44 | tabs.setupWithViewPager(pager); 45 | } 46 | 47 | @Override 48 | public boolean onCreateOptionsMenu(Menu menu) { 49 | getMenuInflater().inflate(R.menu.appmenu, menu); 50 | 51 | SwitchCompat sw = ((SwitchCompat) menu.findItem(R.id.itemSwitch).getActionView()); 52 | sw.setChecked(true); 53 | sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 54 | @Override 55 | public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 56 | setupPager(isChecked); 57 | } 58 | }); 59 | 60 | return true; 61 | } 62 | 63 | @Override 64 | public boolean onOptionsItemSelected(MenuItem item) { 65 | return super.onOptionsItemSelected(item); 66 | } 67 | 68 | public class MyPagerAdapter extends FragmentStatePagerAdapter { 69 | List> fragments; 70 | 71 | public MyPagerAdapter(FragmentManager fm, boolean enabled) { 72 | super(fm); 73 | fragments = new ArrayList<>(); 74 | fragments.add(new Pair(RecyclerViewContentFragment.newInstance(enabled), "RecyclerView")); 75 | fragments.add(new Pair(NestedScrollViewContentFragment.newInstance(enabled), "ScrollView")); 76 | fragments.add(new Pair(ListViewContentFragment.newInstance(enabled), "ListView")); 77 | } 78 | 79 | @Override 80 | public int getCount() { 81 | return fragments.size(); 82 | } 83 | 84 | @Override 85 | public Fragment getItem(int position) { 86 | return fragments.get(position).first; 87 | } 88 | 89 | @Nullable 90 | @Override 91 | public CharSequence getPageTitle(int position) { 92 | return fragments.get(position).second; 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /app/src/main/java/com/h6ah4i/android/example/scrollableviewpagercontent/contents/ListViewContentFragment.java: -------------------------------------------------------------------------------- 1 | package com.h6ah4i.android.example.scrollableviewpagercontent.contents; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.NonNull; 5 | import androidx.annotation.Nullable; 6 | import androidx.fragment.app.Fragment; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.ArrayAdapter; 11 | import android.widget.ListView; 12 | 13 | import com.h6ah4i.android.example.scrollableviewpagercontent.R; 14 | 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | public class ListViewContentFragment extends Fragment { 19 | public static ListViewContentFragment newInstance(boolean enabled) { 20 | Bundle args = new Bundle(); 21 | args.putBoolean("SVPC_ENABLED", enabled); 22 | 23 | ListViewContentFragment fragment = new ListViewContentFragment(); 24 | fragment.setArguments(args); 25 | return fragment; 26 | } 27 | 28 | @Nullable 29 | @Override 30 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 31 | int resId = getArguments().getBoolean("SVPC_ENABLED") 32 | ? R.layout.page_fragment_list_view 33 | : R.layout.page_fragment_normal_list_view; 34 | 35 | return inflater.inflate(resId, container, false); 36 | } 37 | 38 | @Override 39 | public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 40 | super.onViewCreated(view, savedInstanceState); 41 | 42 | ListView listView = view.findViewById(R.id.list_view); 43 | 44 | List items = new ArrayList<>(); 45 | for (int i = 0; i < 100; i++) { 46 | items.add(Integer.toString(i)); 47 | } 48 | listView.setAdapter(new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, items)); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/h6ah4i/android/example/scrollableviewpagercontent/contents/NestedScrollViewContentFragment.java: -------------------------------------------------------------------------------- 1 | package com.h6ah4i.android.example.scrollableviewpagercontent.contents; 2 | 3 | import android.os.Bundle; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | import com.h6ah4i.android.example.scrollableviewpagercontent.R; 9 | 10 | import androidx.annotation.NonNull; 11 | import androidx.annotation.Nullable; 12 | import androidx.fragment.app.Fragment; 13 | 14 | public class NestedScrollViewContentFragment extends Fragment { 15 | public static NestedScrollViewContentFragment newInstance(boolean enabled) { 16 | Bundle args = new Bundle(); 17 | args.putBoolean("SVPC_ENABLED", enabled); 18 | 19 | NestedScrollViewContentFragment fragment = new NestedScrollViewContentFragment(); 20 | fragment.setArguments(args); 21 | return fragment; 22 | } 23 | 24 | @Nullable 25 | @Override 26 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 27 | int resId = getArguments().getBoolean("SVPC_ENABLED") 28 | ? R.layout.page_fragment_nested_scroll_view 29 | : R.layout.page_fragment_normal_nested_scroll_view; 30 | 31 | return inflater.inflate(resId, container, false); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/h6ah4i/android/example/scrollableviewpagercontent/contents/RecyclerViewContentFragment.java: -------------------------------------------------------------------------------- 1 | package com.h6ah4i.android.example.scrollableviewpagercontent.contents; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.NonNull; 5 | import androidx.annotation.Nullable; 6 | import androidx.fragment.app.Fragment; 7 | import androidx.recyclerview.widget.LinearLayoutManager; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.ViewGroup; 12 | import android.widget.TextView; 13 | 14 | import com.h6ah4i.android.example.scrollableviewpagercontent.R; 15 | import com.h6ah4i.android.scrollableviewpagercontent.recyclerview.ViewPagerContentRecyclerViewTouchEventInterceptor; 16 | 17 | public class RecyclerViewContentFragment extends Fragment { 18 | public static RecyclerViewContentFragment newInstance(boolean enabled) { 19 | Bundle args = new Bundle(); 20 | args.putBoolean("SVPC_ENABLED", enabled); 21 | 22 | RecyclerViewContentFragment fragment = new RecyclerViewContentFragment(); 23 | fragment.setArguments(args); 24 | return fragment; 25 | } 26 | 27 | @Nullable 28 | @Override 29 | public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 30 | return inflater.inflate(R.layout.page_fragment_recycler_view, container, false); 31 | } 32 | 33 | @Override 34 | public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 35 | super.onViewCreated(view, savedInstanceState); 36 | RecyclerView recyclerView = view.findViewById(R.id.recycler_view); 37 | recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 38 | if (getArguments().getBoolean("SVPC_ENABLED")) { 39 | recyclerView.addOnItemTouchListener(new ViewPagerContentRecyclerViewTouchEventInterceptor()); 40 | } 41 | recyclerView.setAdapter(new MyRecyclerViewAdapter()); 42 | } 43 | 44 | private static class MyRecyclerViewAdapter extends RecyclerView.Adapter { 45 | @NonNull 46 | @Override 47 | public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 48 | final View view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); 49 | return new MyViewHolder(view); 50 | } 51 | 52 | @Override 53 | public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { 54 | holder.textView.setText(Integer.toString(position)); 55 | } 56 | 57 | @Override 58 | public int getItemCount() { 59 | return 100; 60 | } 61 | } 62 | 63 | private static class MyViewHolder extends RecyclerView.ViewHolder { 64 | private TextView textView; 65 | 66 | public MyViewHolder(View itemView) { 67 | super(itemView); 68 | textView = itemView.findViewById(android.R.id.text1); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 16 | 21 | 26 | 31 | 36 | 41 | 46 | 51 | 56 | 61 | 66 | 71 | 76 | 81 | 86 | 91 | 96 | 101 | 106 | 111 | 116 | 121 | 126 | 131 | 136 | 141 | 146 | 151 | 156 | 161 | 166 | 171 | 172 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 18 | 19 | 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/include_view_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 36 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_fragment_list_view.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_fragment_nested_scroll_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 19 | 20 | 25 | 26 | 31 | 32 | 37 | 38 | 43 | 44 | 49 | 50 | 55 | 56 | 61 | 62 | 67 | 68 | 69 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_fragment_normal_list_view.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_fragment_normal_nested_scroll_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 19 | 20 | 25 | 26 | 31 | 32 | 37 | 38 | 43 | 44 | 49 | 50 | 55 | 56 | 61 | 62 | 67 | 68 | 69 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /app/src/main/res/layout/page_fragment_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/menu/appmenu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/h6ah4i/android-scrollableviewpagercontent/2fab922907852c97a8f82023dc9e6e2ae5191ec4/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 8dp 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ScrollableViewPagerContent 3 | Settings 4 | Hello World from section: %1$d 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |