├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── inspectionProfiles │ ├── My.xml │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── shizhefei │ │ └── view │ │ └── hvscrollview │ │ └── demo │ │ ├── CompareActivity.java │ │ ├── GuideActivity.java │ │ ├── MainActivity.java │ │ └── MoreLayerScrollViewActivity.java │ └── res │ ├── drawable-xhdpi │ ├── edit_normal.9.png │ └── edit_select.9.png │ ├── drawable │ └── edittext_bg.xml │ ├── layout │ ├── activity_compare.xml │ ├── activity_guide.xml │ ├── activity_main.xml │ ├── activity_more_layer_scroll_view.xml │ ├── empty.xml │ ├── item.xml │ ├── item_toptab.xml │ ├── layout2.xml │ ├── scroll_1.xml │ ├── scroll_2.xml │ ├── scroll_3.xml │ └── tttt.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.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 ├── library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── shizhefei │ │ └── view │ │ └── hvscrollview │ │ └── HVScrollView.java │ └── res │ └── values │ └── hvscrollview_attrs.xml ├── raw ├── HVScrollView.apk ├── HVScrollView.gif └── NestedScrollView.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | /local.properties 3 | /.idea/ 4 | /gradle.properties 5 | /gradlew 6 | /gradlew.bat 7 | gradle/ 8 | build/ 9 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/My.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Android > Lint > Correctness 39 | 40 | 41 | Android > Lint > Performance 42 | 43 | 44 | Android > Lint > Security 45 | 46 | 47 | Android > Lint > Usability 48 | 49 | 50 | Android > Lint > Usability > Icons 51 | 52 | 53 | Assignment issuesGroovy 54 | 55 | 56 | Assignment issuesJava 57 | 58 | 59 | Code style issuesJava 60 | 61 | 62 | DeclarationGroovy 63 | 64 | 65 | Encapsulation issuesJava 66 | 67 | 68 | Error handlingJava 69 | 70 | 71 | Finalization issuesJava 72 | 73 | 74 | Groovy 75 | 76 | 77 | Initialization issuesJava 78 | 79 | 80 | J2ME issuesJava 81 | 82 | 83 | JUnit issuesJava 84 | 85 | 86 | Java 87 | 88 | 89 | Java language level migration aidsJava 90 | 91 | 92 | Logging issuesJava 93 | 94 | 95 | Memory issuesJava 96 | 97 | 98 | Performance issuesJava 99 | 100 | 101 | Probable bugsJava 102 | 103 | 104 | Serialization issuesJava 105 | 106 | 107 | Threading issuesGroovy 108 | 109 | 110 | Threading issuesJava 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | Java 123 | 124 | 125 | 126 | 127 | Java 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | Android 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 163 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | HVScrollView 2 | ================== 3 | 4 | #导入方式# 5 | gradle导入 6 | 7 | compile 'com.shizhefei:HVScrollView:1.0.1' 8 | compile 'com.android.support:support-v4:23.4.0' 9 | # 效果图 # 10 | 11 | Download sample [Apk](https://github.com/LuckyJayce/HVScrollView/blob/master/raw/HVScrollView.apk?raw=true) 12 | 13 | ![image](https://github.com/LuckyJayce/HVScrollView/blob/master/raw/HVScrollView.gif) 14 | 15 | # 使用方法 # 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 35 | 36 | 42 | 43 | 44 | 45 | HVScrollView 配置 app:scrollOrientation="horizontal" 相当于 HorizontalScrollView 46 | HVScrollView 配置 app:scrollOrientation="vertical" 相当于 NestedScrollView 或者,ScrollView 47 | HVScrollView 配置 app:scrollOrientation="both" 双向滚动 48 | HVScrollView 配置 app:scrollOrientation="none" 不能滚动 49 | 代码通过setScrollOrientation 设置滚动方向 50 | 51 | ##为什么写这个类库## 52 | 53 | 1.解决ScrollView嵌套ScrollView,当然NestedScrollView也可以,但是它没有水平方向的 54 | 2.解决HorizontalScrollView 在ViewPager下滑动,滑动到末尾切换不了下一个页面ViewPager 55 | 3.支持双向滚动和配置滚动方向 56 | 4.支持CoordinatorLayout和实现NestedScrollingParent,NestedScrollingChild的配合滑动,当然NestedScrollView也是可以.但是它没有水平方向的 57 | 58 | ##主力类库## 59 | 60 | **1.https://github.com/LuckyJayce/ViewPagerIndicator** 61 | Indicator 取代 tabhost,实现网易顶部tab,新浪微博主页底部tab,引导页,无限轮播banner等效果,高度自定义tab和特效 62 | 63 | **2.https://github.com/LuckyJayce/MVCHelper** 64 | 实现下拉刷新,滚动底部自动加载更多,分页加载,自动切换显示网络失败布局,暂无数据布局,支持任意view,支持切换主流下拉刷新框架。 65 | 66 | **3.https://github.com/LuckyJayce/MultiTypeView** 67 | 简化RecyclerView的多种type的adapter,Fragment可以动态添加到RecyclerView上,实现复杂的界面分多个模块开发 68 | 69 | **4.https://github.com/LuckyJayce/EventBus** 70 | 事件总线,通过动态代理接口的形式发布,接收事件。定义一个接口把事件发给注册并实现接口的类 71 | 72 | **5.https://github.com/LuckyJayce/LargeImage** 73 | 大图加载,可供学习 74 | 75 | **6.https://github.com/LuckyJayce/GuideHelper** 76 | 新手引导页,轻松的实现对应的view上面的显示提示信息和展示功能给用户 77 | 78 | **7.https://github.com/LuckyJayce/HVScrollView** 79 | 可以双向滚动的ScrollView,支持嵌套ScrollView联级滑动,参照NestedScrollView和RecyclerView代码写的 80 | 81 | 有什么建议可以发到我的邮箱 794629068@qq.com 82 | 83 | # 联系方式和问题建议 84 | 85 | * 微博:http://weibo.com/u/3181073384 86 | * QQ 群: 开源项目使用交流,问题解答: 549284336(开源盛世) 87 | 88 | License 89 | ======= 90 | 91 | Copyright (C) 2016 shizhefei(LuckyJayce) 92 | Copyright (C) 2015 The Android Open Source Project 93 | 94 | Licensed under the Apache License, Version 2.0 (the "License"); 95 | you may not use this file except in compliance with the License. 96 | You may obtain a copy of the License at 97 | 98 | http://www.apache.org/licenses/LICENSE-2.0 99 | 100 | Unless required by applicable law or agreed to in writing, software 101 | distributed under the License is distributed on an "AS IS" BASIS, 102 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 103 | See the License for the specific language governing permissions and 104 | limitations under the License. -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 25 5 | buildToolsVersion "25.0.0" 6 | defaultConfig { 7 | applicationId "com.shizhefei.view.hvscrollview.demo" 8 | minSdkVersion 9 9 | targetSdkVersion 25 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(include: ['*.jar'], dir: 'libs') 24 | compile 'com.android.support:appcompat-v7:25.0.1' 25 | compile 'com.shizhefei:ViewPagerIndicator:1.1.3' 26 | compile 'com.android.support:recyclerview-v7:25.0.1' 27 | compile project(':library') 28 | } 29 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 26 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/shizhefei/view/hvscrollview/demo/CompareActivity.java: -------------------------------------------------------------------------------- 1 | package com.shizhefei.view.hvscrollview.demo; 2 | 3 | import android.graphics.Color; 4 | import android.os.Bundle; 5 | import android.support.v4.app.FragmentActivity; 6 | import android.support.v4.view.ViewPager; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.TextView; 10 | 11 | import com.shizhefei.view.indicator.IndicatorViewPager; 12 | import com.shizhefei.view.indicator.ScrollIndicatorView; 13 | import com.shizhefei.view.indicator.slidebar.ColorBar; 14 | import com.shizhefei.view.indicator.transition.OnTransitionTextListener; 15 | 16 | public class CompareActivity extends FragmentActivity { 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_compare); 22 | ScrollIndicatorView indicatorView = (ScrollIndicatorView) findViewById(R.id.compare_indicatorView); 23 | ViewPager viewPager = (ViewPager) findViewById(R.id.compare_viewPager); 24 | 25 | indicatorView.setOnTransitionListener(new OnTransitionTextListener().setColor(Color.BLACK, Color.GRAY)); 26 | indicatorView.setScrollBar(new ColorBar(this, Color.BLUE, 8)); 27 | IndicatorViewPager indicatorViewPager = new IndicatorViewPager(indicatorView, viewPager); 28 | indicatorViewPager.setAdapter(new PagerAdapters()); 29 | 30 | } 31 | 32 | private class PagerAdapters extends IndicatorViewPager.IndicatorViewPagerAdapter { 33 | private int[] layouts = {R.layout.scroll_1, R.layout.scroll_2, R.layout.scroll_3, R.layout.empty}; 34 | private String[] titles = {"普通ScrollView", "V4的NestedScrollView", "HVScrollView", "空界面"}; 35 | 36 | @Override 37 | public int getCount() { 38 | return layouts.length; 39 | } 40 | 41 | @Override 42 | public View getViewForTab(int position, View convertView, ViewGroup container) { 43 | if (convertView == null) { 44 | convertView = getLayoutInflater().inflate(R.layout.item_toptab, container, false); 45 | } 46 | TextView textView = (TextView) convertView; 47 | textView.setText(titles[position]); 48 | return convertView; 49 | } 50 | 51 | @Override 52 | public View getViewForPage(int position, View convertView, ViewGroup container) { 53 | return getLayoutInflater().inflate(layouts[position], container, false); 54 | } 55 | } 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/shizhefei/view/hvscrollview/demo/GuideActivity.java: -------------------------------------------------------------------------------- 1 | package com.shizhefei.view.hvscrollview.demo; 2 | 3 | import android.graphics.Color; 4 | import android.os.Bundle; 5 | import android.support.v4.app.FragmentActivity; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.CompoundButton; 9 | import android.widget.EditText; 10 | import android.widget.LinearLayout; 11 | import android.widget.TextView; 12 | import android.widget.ToggleButton; 13 | 14 | import com.shizhefei.view.hvscrollview.HVScrollView; 15 | import com.shizhefei.view.indicator.Indicator; 16 | import com.shizhefei.view.indicator.slidebar.ColorBar; 17 | import com.shizhefei.view.indicator.transition.OnTransitionTextListener; 18 | 19 | 20 | public class GuideActivity extends FragmentActivity { 21 | 22 | private View addButton; 23 | private LinearLayout layout; 24 | private View deleteButton; 25 | private ToggleButton fillViewportHToggleButton; 26 | private ToggleButton fillViewportVToggleButton; 27 | private ToggleButton childLayoutCanterToggleButton; 28 | private HVScrollView hvScrollView; 29 | private Indicator scrollOrientationIndicatorView; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | setContentView(R.layout.activity_guide); 35 | layout = (LinearLayout) findViewById(R.id.guide_layout); 36 | addButton = findViewById(R.id.guide_addButton); 37 | deleteButton = findViewById(R.id.guide_deleteButton); 38 | fillViewportHToggleButton = (ToggleButton) findViewById(R.id.guide_fillViewportH_toggleButton); 39 | fillViewportVToggleButton = (ToggleButton) findViewById(R.id.guide_fillViewportV_toggleButton); 40 | childLayoutCanterToggleButton = (ToggleButton) findViewById(R.id.guide_childLayoutCanter_toggleButton); 41 | hvScrollView = (HVScrollView) findViewById(R.id.guide_hvScrollView); 42 | scrollOrientationIndicatorView = (Indicator) findViewById(R.id.guide_scrollOrientation_indicatorView); 43 | 44 | addButton.setOnClickListener(onClickListener); 45 | deleteButton.setOnClickListener(onClickListener); 46 | 47 | fillViewportHToggleButton.setOnCheckedChangeListener(onCheckedChangeListener); 48 | fillViewportVToggleButton.setOnCheckedChangeListener(onCheckedChangeListener); 49 | childLayoutCanterToggleButton.setOnCheckedChangeListener(onCheckedChangeListener); 50 | 51 | scrollOrientationIndicatorView.setAdapter(indicatorAdapter); 52 | scrollOrientationIndicatorView.setScrollBar(new ColorBar(this, Color.WHITE, 8)); 53 | scrollOrientationIndicatorView.setOnTransitionListener(new OnTransitionTextListener().setColor(Color.WHITE, Color.parseColor("#cccccc"))); 54 | scrollOrientationIndicatorView.setCurrentItem(3); 55 | scrollOrientationIndicatorView.setOnItemSelectListener(onItemSelectListener); 56 | } 57 | 58 | private int index = 1; 59 | private View.OnClickListener onClickListener = new View.OnClickListener() { 60 | @Override 61 | public void onClick(View v) { 62 | if (v == addButton) { 63 | View l = getLayoutInflater().inflate(R.layout.item, layout, false); 64 | EditText editText = (EditText) l.findViewById(R.id.item_editText); 65 | editText.setText(String.format("%02d", index) + ":Hello World"); 66 | layout.addView(l, layout.getChildCount() - 1); 67 | index++; 68 | } else if (v == deleteButton) { 69 | if (layout.getChildCount() > 1) { 70 | layout.removeViewAt(layout.getChildCount() - 2); 71 | } 72 | } 73 | } 74 | }; 75 | 76 | private ToggleButton.OnCheckedChangeListener onCheckedChangeListener = new ToggleButton.OnCheckedChangeListener() { 77 | @Override 78 | public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 79 | if (compoundButton == fillViewportHToggleButton) { //水平内容宽度是否充满,默认false自适应 80 | hvScrollView.setFillViewportH(compoundButton.isChecked()); 81 | 82 | } else if (compoundButton == fillViewportVToggleButton) {//垂直内容高度是否充满,默认false自适应 83 | hvScrollView.setFillViewportV(compoundButton.isChecked()); 84 | 85 | } else if (compoundButton == childLayoutCanterToggleButton) {//内容是否居中显示,默认右上角对齐 86 | hvScrollView.setChildLayoutCenter(compoundButton.isChecked()); 87 | } 88 | } 89 | }; 90 | 91 | private Indicator.IndicatorAdapter indicatorAdapter = new Indicator.IndicatorAdapter() { 92 | private String[] titles = {"不能滚动", "只能水平滚动", "只能垂直滚动", "双向滚动"}; 93 | 94 | @Override 95 | public int getCount() { 96 | return titles.length; 97 | } 98 | 99 | @Override 100 | public View getView(int position, View convertView, ViewGroup parent) { 101 | if (convertView == null) { 102 | convertView = getLayoutInflater().inflate(R.layout.item_toptab, parent, false); 103 | } 104 | TextView textView = (TextView) convertView; 105 | textView.setText(titles[position]); 106 | return convertView; 107 | } 108 | }; 109 | 110 | private Indicator.OnItemSelectedListener onItemSelectListener = new Indicator.OnItemSelectedListener() { 111 | 112 | @Override 113 | public void onItemSelected(View selectItemView, int select, int preSelect) { 114 | // public static final int SCROLL_ORIENTATION_NONE = 0; 115 | // public static final int SCROLL_ORIENTATION_HORIZONTAL = 1; 116 | // public static final int SCROLL_ORIENTATION_VERTICAL = 2; 117 | // public static final int SCROLL_ORIENTATION_BOTH = 3; 118 | hvScrollView.setScrollOrientation(select); 119 | } 120 | }; 121 | 122 | 123 | } 124 | -------------------------------------------------------------------------------- /app/src/main/java/com/shizhefei/view/hvscrollview/demo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.shizhefei.view.hvscrollview.demo; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v4.app.FragmentActivity; 6 | import android.view.View; 7 | 8 | 9 | public class MainActivity extends FragmentActivity { 10 | 11 | private View moreLayerScrollViewButton; 12 | private View guideButton; 13 | private View compareButton; 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_main); 19 | moreLayerScrollViewButton = findViewById(R.id.main_moreLayerScrollView_button); 20 | guideButton = findViewById(R.id.main_guide_button); 21 | compareButton = findViewById(R.id.main_compare_button); 22 | 23 | guideButton.setOnClickListener(onClickListener); 24 | moreLayerScrollViewButton.setOnClickListener(onClickListener); 25 | compareButton.setOnClickListener(onClickListener); 26 | } 27 | 28 | private View.OnClickListener onClickListener = new View.OnClickListener() { 29 | @Override 30 | public void onClick(View v) { 31 | if (v == guideButton) { 32 | startActivity(new Intent(getApplicationContext(), GuideActivity.class)); 33 | } else if (v == moreLayerScrollViewButton) { 34 | startActivity(new Intent(getApplicationContext(), MoreLayerScrollViewActivity.class)); 35 | } else if (v == compareButton) { 36 | startActivity(new Intent(getApplicationContext(), CompareActivity.class)); 37 | } 38 | } 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/shizhefei/view/hvscrollview/demo/MoreLayerScrollViewActivity.java: -------------------------------------------------------------------------------- 1 | package com.shizhefei.view.hvscrollview.demo; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.FragmentActivity; 5 | 6 | public class MoreLayerScrollViewActivity extends FragmentActivity { 7 | 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | setContentView(R.layout.activity_more_layer_scroll_view); 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/edit_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuckyJayce/HVScrollView/4cfeb3a4c6c2626c6847d411a21d710d58500903/app/src/main/res/drawable-xhdpi/edit_normal.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/edit_select.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LuckyJayce/HVScrollView/4cfeb3a4c6c2626c6847d411a21d710d58500903/app/src/main/res/drawable-xhdpi/edit_select.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/edittext_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_compare.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_guide.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 36 | 37 | 43 | 44 | 45 | 46 | 50 | 51 |