├── .gitignore
├── .travis.yml
├── LICENSE
├── README.md
├── build.gradle
├── deps.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── library
├── .gitignore
├── br.gradle
├── build.gradle
├── gradle-mvn-push.gradle
├── gradle.properties
├── proguard-rules.txt
└── src
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── hkm
│ │ └── slider
│ │ ├── Animations
│ │ ├── BaseAnimationInterface.java
│ │ └── DescriptionAnimation.java
│ │ ├── CapturePhotoUtils.java
│ │ ├── GalleryWidget
│ │ ├── BasePagerAdapter.java
│ │ ├── FilePagerAdapter.java
│ │ ├── GalleryViewPager.java
│ │ ├── InfinityFilePagerAdapter.java
│ │ ├── InfinityUrlAdapter.java
│ │ └── UrlPagerAdapter.java
│ │ ├── Indicators
│ │ ├── IContainer.java
│ │ ├── NumContainer.java
│ │ └── PagerIndicator.java
│ │ ├── Layouts
│ │ ├── ArrowDecor.java
│ │ ├── Decor.java
│ │ ├── MaterialRippleLayout.java
│ │ └── NumberDecor.java
│ │ ├── LoyalUtil.java
│ │ ├── SliderAdapter.java
│ │ ├── SliderLayout.java
│ │ ├── SliderTypes
│ │ ├── AdjustableSlide.java
│ │ ├── AdvancedTextSliderView.java
│ │ ├── BaseSliderView.java
│ │ ├── CompactFrameSliderView.java
│ │ ├── CompactSliderView.java
│ │ ├── DefaultSliderView.java
│ │ ├── MiniSliderFrame.java
│ │ ├── NewsFeedArticleView.java
│ │ ├── TextSliderView.java
│ │ └── ZoomableView.java
│ │ ├── TouchView
│ │ ├── EclairMotionEvent.java
│ │ ├── FileTouchImageView.java
│ │ ├── GenerateParams.java
│ │ ├── Generators.java
│ │ ├── InputStreamWrapper.java
│ │ ├── TouchImageView.java
│ │ ├── UrlTouchImageView.java
│ │ └── WrapMotionEvent.java
│ │ ├── TransformerL.java
│ │ ├── Transformers
│ │ ├── AccordionTransformer.java
│ │ ├── BackgroundToForegroundTransformer.java
│ │ ├── BaseTransformer.java
│ │ ├── CubeInTransformer.java
│ │ ├── CubeOutTransformer.java
│ │ ├── DefaultTransformer.java
│ │ ├── DepthPageTransformer.java
│ │ ├── DrawFromBackTransformer.java
│ │ ├── FadeTransformer.java
│ │ ├── FlipHorizontalTransformer.java
│ │ ├── FlipPageViewTransformer.java
│ │ ├── FlipVerticalTransformer.java
│ │ ├── ForegroundToBackgroundTransformer.java
│ │ ├── ParallaxPageTransformer.java
│ │ ├── RotateDownTransformer.java
│ │ ├── RotateUpTransformer.java
│ │ ├── StackTransformer.java
│ │ ├── TabletTransformer.java
│ │ ├── ZoomInTransformer.java
│ │ ├── ZoomOutSlideTransformer.java
│ │ └── ZoomOutTransformer.java
│ │ └── Tricks
│ │ ├── AnimationHelper.java
│ │ ├── ArrowControl.java
│ │ ├── FixedSpeedScroller.java
│ │ ├── InfinitePagerAdapter.java
│ │ ├── InfiniteViewPager.java
│ │ ├── MultiViewPager.java
│ │ └── ViewPagerEx.java
│ └── res
│ ├── drawable
│ ├── arrow_l.xml
│ ├── arrow_r.xml
│ ├── ic_warning_24dp.xml
│ ├── indicator_corner_bg.xml
│ ├── shadow_hb_professional.xml
│ └── shadow_upward.xml
│ ├── layout
│ ├── compact_2_images.xml
│ ├── compact_3_images.xml
│ ├── compact_4_images.xml
│ ├── compact_frame_2.xml
│ ├── compact_frame_3.xml
│ ├── compact_frame_4.xml
│ ├── content_zoomable_slide.xml
│ ├── content_zoomble_slider_frame.xml
│ ├── default_num_layout.xml
│ ├── defaultnumberindicator.xml
│ ├── hb_feature_slide.xml
│ ├── hb_feature_slide_ripple.xml
│ ├── indicator_layout.xml
│ ├── render_type_adjustable.xml
│ ├── render_type_default.xml
│ ├── render_type_text.xml
│ └── slider_layout.xml
│ ├── mipmap-xxhdpi
│ ├── ns_left_arrow.png
│ └── ns_right_arrow.png
│ └── values
│ ├── attrs.xml
│ ├── color.xml
│ ├── dimen.xml
│ ├── ids.xml
│ ├── strings.xml
│ └── styles.xml
├── loghistory.md
├── scn
├── WW_PhoneKOT49Hhesk11262015103358.png
├── WW_PhoneKOT49Hhesk11262015103406.png
├── anglerMDB08Lhesk11262015104332.png
├── anglerMDB08Lhesk11262015104346.png
├── anglerMDB08Lhesk11262015104354.png
├── device-2015-06-17-142823.png
├── device-2015-06-17-150718.png
└── device-2015-06-17-150829.png
├── scripts
├── do.sh
└── maven.sh
├── settings.gradle
├── supportslidr
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── hkm
│ │ └── supportslidr
│ │ └── ApplicationTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── com
│ │ │ └── hkm
│ │ │ └── supportslidr
│ │ │ └── ZoomablePicassoSwippable.java
│ └── res
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── com
│ └── hkm
│ └── supportslidr
│ └── ExampleUnitTest.java
└── testApp
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
├── androidTest
└── java
│ └── com
│ └── hkm
│ └── loyalns
│ └── ApplicationTest.java
├── main
├── AndroidManifest.xml
├── assets
│ ├── q65.jpg
│ ├── q66.jpg
│ ├── q67.jpg
│ └── q68.jpg
├── ic_launcher-web.png
├── java
│ └── com
│ │ └── hkm
│ │ └── loyalns
│ │ ├── TheMain.java
│ │ ├── Util
│ │ ├── ChildAnimationExample.java
│ │ └── DataProvider.java
│ │ ├── demos
│ │ ├── BigScreenDL.java
│ │ ├── BigScreenDemo.java
│ │ ├── DelayInitalzation.java
│ │ ├── ExampleClassic.java
│ │ ├── MainActivityFragment.java
│ │ ├── MultSections.java
│ │ ├── NewsArticle.java
│ │ ├── SliderAdjust1.java
│ │ ├── SliderAdjust2.java
│ │ ├── ZoomScreenSlider.java
│ │ ├── ZoomViewPager2.java
│ │ ├── ZoomView_Single.java
│ │ └── ZoomView_Three.java
│ │ ├── mod
│ │ ├── BaseApp.java
│ │ └── NsZoomable.java
│ │ └── modules
│ │ ├── CustomNumberView.java
│ │ ├── NewsBurner.java
│ │ ├── NumZero.java
│ │ └── TransformerAdapter.java
└── res
│ ├── drawable-hdpi
│ ├── bigbang.jpg
│ ├── bird.png
│ ├── d1.png
│ ├── game_of_thrones.jpg
│ ├── hannibal.jpg
│ ├── house.jpg
│ └── ic_no_photo_classic.png
│ ├── drawable-mdpi
│ └── ic_no_photo_classic.png
│ ├── drawable-xhdpi
│ └── ic_no_photo_classic.png
│ ├── drawable-xxhdpi
│ └── ic_no_photo_classic.png
│ ├── drawable
│ ├── ic_add_24dp.xml
│ ├── myarrowl.xml
│ ├── nspider.xml
│ └── shadow_transit.xml
│ ├── layout
│ ├── b_slider.xml
│ ├── bouncer_slider.xml
│ ├── content_main.xml
│ ├── fragment_main.xml
│ ├── full_scn.xml
│ ├── item.xml
│ ├── item_adjustable_slide.xml
│ ├── item_slide_feature_banner.xml
│ ├── main_menu.xml
│ ├── main_slider.xml
│ ├── news_feed_item.xml
│ ├── numfield.xml
│ ├── pager_slide.xml
│ ├── test_adjustment_height.xml
│ └── vertical_slider.xml
│ ├── menu
│ └── menu_main.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-v21
│ └── styles.xml
│ ├── values-w820dp
│ └── dimens.xml
│ └── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
└── test
└── java
└── com
└── hkm
└── loyalns
└── ExampleUnitTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 |
12 | # Maven
13 | target/
14 | pom.xml.*
15 | release.properties
16 |
17 | # Eclipse
18 | .classpath
19 | .project
20 | .externalToolBuilders/
21 | .apt_generated/
22 |
23 |
24 | # Generated files
25 | bin/
26 | gen/
27 |
28 | # Gradle files
29 | .gradle/
30 |
31 | gradle/
32 | .gradle/
33 | /*/build/
34 |
35 | # Local configuration file (sdk path, etc)
36 | local.properties
37 |
38 | # Proguard folder generated by Eclipse
39 | proguard/
40 |
41 | # Log Files
42 | *.log
43 |
44 | /gradlew.bat
45 | /gradlew
46 |
47 | /local.properties
48 | .DS_Store
49 | /build
50 |
51 | # IntelliJ
52 | *.iml
53 | *.ipr
54 | *.iws
55 |
56 | out/
57 | output/
58 | .gitignore.orig
59 | .project.bak
60 | .settings/org.eclipse.core.resources.prefs
61 | .settings/org.eclipse.core.runtime.prefs
62 | .settings/org.eclipse.jdt.apt.core.prefs
63 | .settings/org.eclipse.jdt.core.prefs
64 | .settings/org.eclipse.jdt.launching.prefs
65 | .settings/
66 | .gradle/2.2.1/taskArtifacts/cache.properties.lock
67 | .gradle/2.2.1/taskArtifacts/cache.properties.lock
68 | *.lock
69 | .gradle/2.2.1/taskArtifacts/cache.properties.lock
70 | .gradle/2.2.1/taskArtifacts/fileHashes.bin
71 | .gradle/2.2.1/taskArtifacts/fileSnapshots.bin
72 | .gradle/2.2.1/taskArtifacts/outputFileStates.bin
73 | .gradle/2.2.1/taskArtifacts/taskArtifacts.bin
74 |
75 | build/intermediates/dex-cache/cache.xml
76 | build/intermediates/gradle_project_sync_data.bin
77 | local.properties
78 | .idea/
79 | */.idea
80 |
81 | **/*.iml
82 |
83 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: android
2 | android:
3 | components:
4 | - platform-tools
5 | - tools
6 | - build-tools-23.0.2
7 | - android-23
8 | - extra-android-m2repository
9 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | repositories {
4 | jcenter()
5 | mavenCentral()
6 | }
7 | dependencies {
8 | classpath 'com.github.dcendents:android-maven-plugin:1.2'
9 | classpath 'com.android.tools.build:gradle:2.3.3'
10 | classpath 'com.novoda:bintray-release:0.5.0'
11 | }
12 | }
13 |
14 | allprojects {
15 | repositories {
16 | jcenter()
17 | mavenCentral()
18 | maven { url "https://jitpack.io" }
19 | }
20 | }
21 | apply from: "$rootDir/deps.gradle"
--------------------------------------------------------------------------------
/deps.gradle:
--------------------------------------------------------------------------------
1 | rootProject.ext.supportDependencies = [
2 |
3 | percent : "com.android.support:percent:${SUPPORT_LIBRARY}",
4 | annotation : "com.android.support:support-annotations:${SUPPORT_LIBRARY}",
5 | support : "com.android.support:support-v13:${SUPPORT_LIBRARY}",
6 | appCompat : "com.android.support:appcompat-v7:${SUPPORT_LIBRARY}",
7 | recycler : "com.android.support:recyclerview-v7:${SUPPORT_LIBRARY}",
8 | design : "com.android.support:design:${SUPPORT_LIBRARY}",
9 | cardView : "com.android.support:cardview-v7:${SUPPORT_LIBRARY}",
10 | mediarouter : "com.android.support:mediarouter-v7:${SUPPORT_LIBRARY}",
11 | palette : "com.android.support:palette-v7:${SUPPORT_LIBRARY}",
12 |
13 | retrofitAdapter : "com.squareup.retrofit2:retrofit-adapters:${RETROFIT_LIBRARY}",
14 | retrofitCore : "com.squareup.retrofit2:retrofit:${RETROFIT_LIBRARY}",
15 | retrofitRXJava : "com.squareup.retrofit2:adapter-rxjava:${RETROFIT_LIBRARY}",
16 | retrofitConverterGson : "com.squareup.retrofit2:converter-gson:${RETROFIT_LIBRARY}",
17 | retrofitParent : "com.squareup.retrofit2:parent:${RETROFIT_LIBRARY}",
18 |
19 | okhttpLogger : "com.squareup.okhttp3:logging-interceptor:${OKHTTP_LIBRARY}",
20 | okhttpWebsocket : "com.squareup.okhttp3:okhttp-ws:${OKHTTP_LIBRARY}",
21 | okhttpCore : "com.squareup.okhttp3:okhttp:${OKHTTP_LIBRARY}",
22 |
23 | icepick : "frankiesardo:icepick:${FRANKIES_ICEPICK}",
24 | icepickProcessor : "frankiesardo:icepick-processor:${FRANKIES_ICEPICK}",
25 |
26 | smartTabLayoutUtilsV13: "com.ogaclejapan.smarttablayout:utils-v13:${SMARTTABLAYOUT}@aar",
27 | smartTabLayoutUtilsV4 : "com.ogaclejapan.smarttablayout:utils-v4:${SMARTTABLAYOUT}@aar",
28 | smartTabLayoutCore : "com.ogaclejapan.smarttablayout:library:${SMARTTABLAYOUT}@aar",
29 |
30 | leakcanary : "com.squareup.leakcanary:leakcanary-android:${LEAKCANARY}",
31 | leakcanarynoop : "com.squareup.leakcanary:leakcanary-android-no-op:${LEAKCANARY}",
32 |
33 | gms_facial : "com.google.android.gms:play-services-vision:9.8.0",
34 | gms_anayltics : "com.google.android.gms:play-services-analytics:${GOOGLE_PLAY_SERVICE}",
35 |
36 | dagger : "com.google.dagger:dagger:${DAGGER_2}",
37 | daggerapt : "com.google.dagger:dagger-compiler:${DAGGER_2}",
38 |
39 |
40 | fishglassannotation : "org.glassfish:javax.annotation:10.0-b28",
41 | pretty_time : "org.ocpsoft.prettytime:prettytime:4.0.1.Final",
42 | gson : "com.google.code.gson:gson:2.6.2",
43 | jsoup : "org.jsoup:jsoup:1.9.2",
44 |
45 | firebasecore : "com.google.firebase:firebase-core:${FIREBASE}",
46 | database : "com.google.firebase:firebase-database:${FIREBASE}",
47 | storage : "com.google.firebase:firebase-storage:${FIREBASE}",
48 | crash : "com.google.firebase:firebase-crash:${FIREBASE}",
49 | auth : "com.google.firebase:firebase-auth:${FIREBASE}",
50 | messaging : "com.google.firebase:firebase-messaging:${FIREBASE}",
51 | config : "com.google.firebase:firebase-config:${FIREBASE}",
52 | invites : "com.google.firebase:firebase-invites:${FIREBASE}",
53 | ads : "com.google.firebase:firebase-ads:${FIREBASE}",
54 | appindexing : "com.google.firebase:firebase-appindexing:${FIREBASE}"
55 |
56 | ]
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | VERSION_NAME=1.12.1
3 | VERSION_CODE=122
4 | GROUP=com.hkm.loyalslider
5 | PUBLISH_GROUP_ID=com.hkm.loyalslider
6 | POM_DESCRIPTION=This is the slider for JAVA android use. Thanks to Android Image Slider. This will make it even a better one!
7 | POM_URL=https://github.com/jjhesk/LoyalNativeSlider
8 | POM_SCM_URL=https://github.com/jjhesk/LoyalNativeSlider
9 | POM_SCM_CONNECTION=scm:https://github.com/jjhesk/LoyalNativeSlider.git
10 | POM_SCM_DEV_CONNECTION=scm:https://github.com/jjhesk/LoyalNativeSlider.git
11 | POM_LICENCE_NAME=MIT
12 | POM_LICENCE_URL=http://opensource.org/licenses/MIT
13 | POM_LICENCE_DIST=repo
14 | POM_DEVELOPER_ID=jjhesk
15 | POM_DEVELOPER_NAME=jjhesk
16 | POM_EMAIL=nonoKd@gmail.com
17 | ANDROID_BUILD_MIN_SDK_VERSION=15
18 | ANDROID_BUILD_TARGET_SDK_VERSION=25
19 | ANDROID_BUILD_SDK_VERSION=25
20 | ANDROID_BUILD_TOOLS_VERSION=25.0.2
21 | BAPI=17479d176480ed0232fe101b6555654a2624d7a0
22 | FITKIT=0.4.1
23 | SUPPORT_LIBRARY=25.3.1
24 | RETROFIT_LIBRARY=2.2.0
25 | OKHTTP_LIBRARY=3.6.0
26 | LOOKBACK_SDK=1.5.3
27 | FIREBASE=10.2.1
28 | #version check on @link https://github.com/frankiesardo/icepick
29 | FRANKIES_ICEPICK=3.2.0
30 | #version check on @link https://github.com/ogaclejapan/SmartTabLayout
31 | SMARTTABLAYOUT=1.6.1
32 | #version check on @link https://github.com/square/leakcanary
33 | LEAKCANARY=1.5
34 | GOOGLE_PLAY_SERVICE=9.8.0
35 | DAGGER_2=2.8
36 |
37 |
38 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Jun 07 20:15:27 CST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/library/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/library/br.gradle:
--------------------------------------------------------------------------------
1 | //apply plugin: 'bintray-release'
2 | apply plugin: 'com.novoda.bintray-release'
3 |
4 | publish {
5 | userOrg = project.POM_DEVELOPER_ID
6 | groupId = project.PUBLISH_GROUP_ID
7 | artifactId = project.POM_ARTIFACT_ID
8 | version = project.VERSION_NAME
9 | uploadName = project.POM_ARTIFACT_ID
10 | description = project.POM_DESCRIPTION
11 | website = project.POM_URL
12 | autoPublish = true
13 | dryRun = false
14 | issueTracker = "${website}/issues"
15 | licences = [project.POM_LICENCE_NAME]
16 | }
17 | /*
18 |
19 | project.publishing {
20 | publications {
21 | maven(MavenPublication) {
22 | groupId project.publish.groupId
23 | artifactId project.publish.artifactId
24 | version project.publish.version
25 |
26 | artifacts.all(project).each {
27 | delegate.artifact it
28 | }
29 |
30 | from artifacts.from(project)
31 | }
32 | }
33 | }
34 | */
35 |
36 | if (hasProperty('POM_DEVELOPER_ID')) {
37 | publish.bintrayUser = property('POM_DEVELOPER_ID')
38 | }
39 |
40 | if (hasProperty('BAPI')) {
41 | publish.bintrayKey = property('BAPI')
42 | }
43 |
44 | apply plugin: 'maven'
45 | /*
46 | task sourcesJar(type: Jar) {
47 | from android.sourceSets.main.java.srcDirs
48 | classifier = 'sources'
49 | }
50 |
51 | task javadoc(type: Javadoc) {
52 | source = android.sourceSets.main.java.srcDirs
53 | classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
54 | }
55 |
56 | task javadocJar(type: Jar, dependsOn: javadoc) {
57 | classifier = 'javadoc'
58 | from javadoc.destinationDir
59 | options.encoding = 'UTF-8'
60 | }
61 | artifacts {
62 | archives javadocJar
63 | archives sourcesJar
64 | }*/
65 |
66 | task createPom << {
67 | pom {
68 | project {
69 | name project.POM_DESCRIPTION
70 | packaging project.POM_PACKAGING
71 | description project.POM_DESCRIPTION
72 | url project.POM_URL
73 | version project.VERSION_NAME
74 |
75 | scm {
76 | url project.POM_SCM_CONNECTION
77 | connection project.POM_SCM_CONNECTION
78 | developerConnection project.POM_SCM_CONNECTION
79 | }
80 |
81 | licenses {
82 | license {
83 | name project.POM_LICENCE_NAME
84 | }
85 | }
86 |
87 | developers {
88 | developer {
89 | id project.POM_DEVELOPER_ID
90 | name project.POM_DEVELOPER_NAME
91 | email project.POM_EMAIL
92 | }
93 | }
94 | }
95 | }.writeTo("build/publications/maven/pom-default.xml")
96 |
97 |
98 | }
--------------------------------------------------------------------------------
/library/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion ANDROID_BUILD_SDK_VERSION as int
5 | buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
6 |
7 | defaultConfig {
8 | minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int
9 | targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
10 | versionCode VERSION_CODE as int
11 | versionName VERSION_NAME
12 | }
13 | buildTypes {
14 | release {
15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
16 | }
17 | }
18 | lintOptions {
19 | abortOnError false
20 | }
21 | }
22 |
23 | dependencies {
24 | compile fileTree(dir: 'libs', include: ['*.jar'])
25 | compile supportDependencies.appCompat
26 | compile supportDependencies.support
27 | compile 'com.squareup.picasso:picasso:2.5.2'
28 | compile('com.github.bumptech.glide:glide:4.0.0') {
29 | exclude group: 'com.android.support'
30 | }
31 | annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
32 | compile('com.github.chrisbanes:PhotoView:2.1.3') {
33 | exclude group: 'com.squareup.picasso'
34 | }
35 | //compile 'com.github.chrisbanes:PhotoView:2.0.0'
36 | compile 'jp.wasabeef:glide-transformations:2.0.2'
37 | // If you want to use the GPU Filters
38 | compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
39 | }
40 |
41 | //apply from: './gradle-mvn-push.gradle'
42 | apply from: './br.gradle'
--------------------------------------------------------------------------------
/library/gradle-mvn-push.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2013 Chris Banes
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | apply plugin: 'maven'
18 | apply plugin: 'signing'
19 |
20 | def isReleaseBuild() {
21 | return VERSION_NAME.contains("SNAPSHOT") == false
22 | }
23 |
24 | def getReleaseRepositoryUrl() {
25 | return hasProperty('RELEASE_REPOSITORY_URL') ? RELEASE_REPOSITORY_URL
26 | : "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
27 | }
28 |
29 | def getSnapshotRepositoryUrl() {
30 | return hasProperty('SNAPSHOT_REPOSITORY_URL') ? SNAPSHOT_REPOSITORY_URL
31 | : "https://oss.sonatype.org/content/repositories/snapshots/"
32 | }
33 |
34 | def getRepositoryUsername() {
35 | return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
36 | }
37 |
38 | def getRepositoryPassword() {
39 | return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
40 | }
41 |
42 | afterEvaluate { project ->
43 | uploadArchives {
44 | repositories {
45 | mavenDeployer {
46 | beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
47 |
48 | pom.groupId = GROUP
49 | pom.artifactId = POM_ARTIFACT_ID
50 | pom.version = VERSION_NAME
51 |
52 | repository(url: getReleaseRepositoryUrl()) {
53 | authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
54 | }
55 | snapshotRepository(url: getSnapshotRepositoryUrl()) {
56 | authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
57 | }
58 |
59 | pom.project {
60 | name POM_NAME
61 | packaging POM_PACKAGING
62 | description POM_DESCRIPTION
63 | url POM_URL
64 |
65 | scm {
66 | url POM_SCM_URL
67 | connection POM_SCM_CONNECTION
68 | developerConnection POM_SCM_DEV_CONNECTION
69 | }
70 |
71 | licenses {
72 | license {
73 | name POM_LICENCE_NAME
74 | url POM_LICENCE_URL
75 | distribution POM_LICENCE_DIST
76 | }
77 | }
78 |
79 | developers {
80 | developer {
81 | id POM_DEVELOPER_ID
82 | name POM_DEVELOPER_NAME
83 | }
84 | }
85 | }
86 | }
87 | }
88 | }
89 |
90 | signing {
91 | required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
92 | sign configurations.archives
93 | }
94 |
95 | task apklib(type: Zip){
96 | appendix = extension = 'apklib'
97 |
98 | from 'AndroidManifest.xml'
99 | into('res') {
100 | from 'res'
101 | }
102 | into('src') {
103 | from 'src'
104 | }
105 | }
106 |
107 |
108 | task androidJavadocs(type: Javadoc) {
109 | source = android.sourceSets.main.java.srcDirs
110 | classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
111 | options.links("http://docs.oracle.com/javase/7/docs/api/");
112 | options.linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference"
113 | exclude '**/BuildConfig.java'
114 | exclude '**/R.java'
115 | failOnError = false
116 | }
117 |
118 | task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
119 | classifier = 'javadoc'
120 | from androidJavadocs.destinationDir
121 | }
122 |
123 | task androidSourcesJar(type: Jar) {
124 | classifier = 'sources'
125 | from android.sourceSets.main.java.sourceFiles
126 | }
127 |
128 | artifacts {
129 | archives androidSourcesJar
130 | archives androidJavadocsJar
131 | archives apklib
132 | }
133 | }
--------------------------------------------------------------------------------
/library/gradle.properties:
--------------------------------------------------------------------------------
1 | POM_NAME=LoyalNativeSlider Library
2 | POM_ARTIFACT_ID=library
3 | POM_PACKAGING=aar
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/library/proguard-rules.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 | -keep public class * implements com.bumptech.glide.module.GlideModule
4 | -keep public class * extends com.bumptech.glide.AppGlideModule
5 | -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
6 | **[] $VALUES;
7 | public *;
8 | }
9 |
10 | # for DexGuard only
11 | -keepresourcexmlelements manifest/application/meta-data@value=GlideModule
12 |
--------------------------------------------------------------------------------
/library/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Animations/BaseAnimationInterface.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Animations;
2 |
3 | import android.view.View;
4 |
5 | /**
6 | * This interface gives you chance to inject your own animation or do something when the
7 | * {@link com.hkm.slider.Tricks.ViewPagerEx} animation (PagerTransformer) starts or ends.
8 | * /
9 | * /
10 | * There are two items you have to know. The first item is the slider you are dragging. This item
11 | * I call it Current Item. The second is the slider that gonna to show. I call that Next Item.
12 | * /
13 | * When you start to drag the slider in front of you, onPrepareCurrentItemLeaveScreen() and
14 | * onPrepareNextItemShowInScreen will be called.
15 | * /
16 | * When you finish drag, the onCurrentItemDisappear and onNextItemAppear will be invoked.
17 | * /
18 | * You can see a demo class {@link com.hkm.slider.Animations.DescriptionAnimation},
19 | * this class gives the description text an animation.
20 | */
21 | public interface BaseAnimationInterface {
22 |
23 | /**
24 | * When the current item prepare to start leaving the screen.
25 | *
26 | * @param current view
27 | */
28 | void onPrepareCurrentItemLeaveScreen(View current);
29 |
30 | /**
31 | * The next item which will be shown in ViewPager/
32 | *
33 | * @param next view
34 | */
35 | void onPrepareNextItemShowInScreen(View next);
36 |
37 | /**
38 | * Current item totally disappear from screen.
39 | *
40 | * @param view view
41 | */
42 | void onCurrentItemDisappear(View view);
43 |
44 | /**
45 | * Next item totally show in screen.
46 | *
47 | * @param view view
48 | */
49 | void onNextItemAppear(View view);
50 | }
51 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/GalleryWidget/BasePagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.GalleryWidget;
2 | import android.content.Context;
3 | import android.os.Parcelable;
4 | import android.support.v4.view.PagerAdapter;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | Class wraps URLs to adapter, then it instantiates UrlTouchImageView objects to paging up through them.
12 | */
13 | public class BasePagerAdapter extends PagerAdapter {
14 |
15 | protected final List mResources;
16 | protected final Context mContext;
17 | protected int mCurrentPosition = -1;
18 | protected OnItemChangeListener mOnItemChangeListener;
19 |
20 | public BasePagerAdapter()
21 | {
22 | mResources = null;
23 | mContext = null;
24 | }
25 |
26 | public BasePagerAdapter(Context context, List resources)
27 | {
28 | this.mResources = resources;
29 | this.mContext = context;
30 | }
31 |
32 | @Override
33 | public void setPrimaryItem(ViewGroup container, final int position, Object object) {
34 | super.setPrimaryItem(container, position, object);
35 | if (mCurrentPosition == position) return;
36 | GalleryViewPager galleryContainer = ((GalleryViewPager)container);
37 | if (galleryContainer.mCurrentView != null) {
38 | galleryContainer.mCurrentView.resetScale();
39 | }
40 | mCurrentPosition = position;
41 | if (mOnItemChangeListener != null) mOnItemChangeListener.onItemChange(mCurrentPosition);
42 | }
43 |
44 | @Override
45 | public void destroyItem(ViewGroup collection, int position, Object view){
46 | collection.removeView((View) view);
47 | }
48 |
49 | @Override
50 | public int getCount()
51 | {
52 | return mResources.size();
53 | }
54 |
55 | @Override
56 | public boolean isViewFromObject(View view, Object object){
57 | return view.equals(object);
58 | }
59 |
60 | @Override
61 | public void finishUpdate(ViewGroup arg0){
62 | }
63 |
64 | @Override
65 | public void restoreState(Parcelable arg0, ClassLoader arg1){
66 | }
67 |
68 | @Override
69 | public Parcelable saveState(){
70 | return null;
71 | }
72 |
73 | @Override
74 | public void startUpdate(ViewGroup arg0) { }
75 |
76 | public int getCurrentPosition() { return mCurrentPosition; }
77 |
78 | public void setOnItemChangeListener(OnItemChangeListener listener) { mOnItemChangeListener = listener; }
79 |
80 | public static interface OnItemChangeListener
81 | {
82 | public void onItemChange(int currentPosition);
83 | }
84 | };
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/GalleryWidget/FilePagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.GalleryWidget;
2 | import java.util.List;
3 |
4 | import android.content.Context;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 |
8 | import com.hkm.slider.TouchView.FileTouchImageView;
9 |
10 | /**
11 | Class wraps file paths to adapter, then it instantiates {@link com.hkm.slider.TouchView.FileTouchImageView} objects to paging up through them.
12 | */
13 | public class FilePagerAdapter extends BasePagerAdapter {
14 |
15 |
16 | public FilePagerAdapter(Context context, List resources)
17 | {
18 | super(context, resources);
19 | }
20 |
21 | @Override
22 | public void setPrimaryItem(ViewGroup container, int position, Object object) {
23 | super.setPrimaryItem(container, position, object);
24 | ((GalleryViewPager)container).mCurrentView = ((FileTouchImageView)object).getImageView();
25 | }
26 |
27 | @Override
28 | public Object instantiateItem(ViewGroup collection, int position){
29 | final FileTouchImageView iv = new FileTouchImageView(mContext);
30 | iv.setUrl(mResources.get(position));
31 | iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
32 |
33 | collection.addView(iv, 0);
34 | return iv;
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/GalleryWidget/InfinityFilePagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.GalleryWidget;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 |
8 | import com.hkm.slider.TouchView.FileTouchImageView;
9 |
10 | import java.util.List;
11 |
12 |
13 | /**
14 | * Class wraps file paths to adapter, then it instantiates {@link com.hkm.slider.TouchView.FileTouchImageView} objects to paging up through them.
15 | */
16 | public class InfinityFilePagerAdapter extends BasePagerAdapter {
17 |
18 | private int TOTAL_PAGES = -1;
19 | private int MIN_LOOPS = 1000;
20 | // You can choose a bigger number for LOOPS, but you know, nobody will fling
21 | // more than 1000 times just in order to test your "infinite" ViewPager :D
22 | public int FIRST_PAGE = 1;
23 |
24 | private ImageView.ScaleType mScaleType = null;
25 |
26 | public InfinityFilePagerAdapter(Context context, List resources) {
27 | super(context, resources);
28 | TOTAL_PAGES = resources.size();
29 | FIRST_PAGE = TOTAL_PAGES * MIN_LOOPS / 2;
30 | }
31 |
32 | @Override
33 | public void setPrimaryItem(ViewGroup container, int position, Object object) {
34 | super.setPrimaryItem(container, position, object);
35 | ((GalleryViewPager) container).mCurrentView = ((FileTouchImageView) object).getImageView();
36 | }
37 |
38 | @Override
39 | public Object instantiateItem(ViewGroup collection, int position) {
40 | final FileTouchImageView iv = new FileTouchImageView(mContext);
41 |
42 | position = position % TOTAL_PAGES;
43 |
44 | iv.setUrl(mResources.get(position));
45 | iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
46 |
47 | if (mScaleType != null)
48 | iv.setScaleType(mScaleType);
49 | collection.addView(iv, 0);
50 | return iv;
51 | }
52 |
53 | /**
54 | * Set Scaletype for ImageView
55 | *
56 | * @param scaletype type
57 | */
58 | public void setScaleTypeForImageView(ImageView.ScaleType scaletype) {
59 | mScaleType = scaletype;
60 | }
61 |
62 | @Override
63 | public int getCount() {
64 | return TOTAL_PAGES * MIN_LOOPS;
65 | }
66 |
67 | };
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/GalleryWidget/InfinityUrlAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.GalleryWidget;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 | import android.view.ViewGroup;
6 | import android.widget.ImageView;
7 |
8 | import com.hkm.slider.TouchView.UrlTouchImageView;
9 |
10 | import java.util.List;
11 |
12 |
13 | /**
14 | * Created by fabio on 28/05/14.
15 | */
16 | public class InfinityUrlAdapter extends BasePagerAdapter {
17 |
18 | private int TOTAL_PAGES = -1;
19 | private int MIN_LOOPS = 1000;
20 | // You can choose a bigger number for LOOPS, but you know, nobody will fling
21 | // more than 1000 times just in order to test your "infinite" ViewPager :D
22 | public int FIRST_PAGE = 1;
23 | private ImageView.ScaleType mScaleType = null;
24 |
25 | public InfinityUrlAdapter(Context context, List resources) {
26 | super(context, resources);
27 | TOTAL_PAGES = resources.size();
28 | FIRST_PAGE = TOTAL_PAGES * MIN_LOOPS / 2;
29 | }
30 |
31 |
32 | @Override
33 | public void setPrimaryItem(ViewGroup container, int position, Object object) {
34 | super.setPrimaryItem(container, FIRST_PAGE/*position*/, object);
35 | ((GalleryViewPager) container).mCurrentView = ((UrlTouchImageView) object).getImageView();
36 | }
37 |
38 | @Override
39 | public Object instantiateItem(ViewGroup collection, int position) {
40 |
41 | position = position % TOTAL_PAGES;
42 | final UrlTouchImageView iv = new UrlTouchImageView(mContext);
43 | iv.setUrl(mResources.get(position));
44 | iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
45 | if (mScaleType != null)
46 | iv.setScaleType(mScaleType);
47 | collection.addView(iv, 0);
48 | return iv;
49 | }
50 |
51 | /**
52 | * Set Scaletype for ImageView
53 | *
54 | * @param scaletype type
55 | */
56 | public void setScaleTypeForImageView(ImageView.ScaleType scaletype) {
57 | mScaleType = scaletype;
58 | }
59 |
60 | @Override
61 | public int getCount() {
62 | return TOTAL_PAGES * MIN_LOOPS;
63 | }
64 | };
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/GalleryWidget/UrlPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.GalleryWidget;
2 |
3 | import java.util.List;
4 |
5 | import android.content.Context;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import com.hkm.slider.TouchView.UrlTouchImageView;
10 |
11 |
12 | /**
13 | * Class wraps URLs to adapter, then it instantiates {@link com.hkm.slider.TouchView.FileTouchImageView} objects to paging up through them.
14 | */
15 | public class UrlPagerAdapter extends BasePagerAdapter {
16 |
17 | public UrlPagerAdapter(Context context, List resources) {
18 | super(context, resources);
19 | }
20 |
21 | @Override
22 | public void setPrimaryItem(ViewGroup container, int position, Object object) {
23 | super.setPrimaryItem(container, position, object);
24 | ((GalleryViewPager) container).mCurrentView = ((UrlTouchImageView) object).getImageView();
25 | }
26 |
27 | @Override
28 | public Object instantiateItem(ViewGroup collection, final int position) {
29 | final UrlTouchImageView iv = new UrlTouchImageView(mContext);
30 | iv.setUrl(mResources.get(position));
31 | iv.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
32 | collection.addView(iv, 0);
33 | return iv;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Indicators/IContainer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Indicators;
2 |
3 | /**
4 | * Created by hesk on 6/28/2015.
5 | */
6 | public interface IContainer {
7 | int getResLayout();
8 |
9 | int getTextField();
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Layouts/ArrowDecor.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Layouts;
2 |
3 | import android.support.annotation.DrawableRes;
4 |
5 | /**
6 | * Created by hesk on 7/3/16.
7 | */
8 | public class ArrowDecor extends Decor {
9 | @Override
10 | public void create() {
11 |
12 | }
13 |
14 | public static class Builder {
15 | @DrawableRes
16 | private int right, left;
17 | private boolean autoHide = false;
18 | private boolean enableSingleItemHide = true;
19 |
20 |
21 | public Builder hideOnSingleItem(boolean enableSingleItemHide) {
22 | this.enableSingleItemHide = enableSingleItemHide;
23 | return this;
24 | }
25 |
26 |
27 | public Builder setAutoHide(boolean autoHide) {
28 | this.autoHide = autoHide;
29 | return this;
30 | }
31 |
32 | public Builder setLeftResId(final @DrawableRes int left) {
33 | this.left = left;
34 | return this;
35 | }
36 |
37 | public Builder setRightResId(final @DrawableRes int right) {
38 | this.right = right;
39 | return this;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Layouts/Decor.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Layouts;
2 |
3 | /**
4 | * Created by hesk on 7/3/16.
5 | */
6 | public abstract class Decor {
7 | public abstract void create();
8 | }
9 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Layouts/NumberDecor.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Layouts;
2 |
3 | import android.support.annotation.DrawableRes;
4 |
5 | /**
6 | * Created by hesk on 7/3/16.
7 | */
8 | public class NumberDecor extends Decor {
9 | @Override
10 | public void create() {
11 |
12 | }
13 |
14 | public static class Builder {
15 | @DrawableRes
16 | private int right, left;
17 | private boolean autoHide = false;
18 | private boolean enableSingleItemHide = true;
19 |
20 |
21 | public Builder hideOnSingleItem(boolean enableSingleItemHide) {
22 | this.enableSingleItemHide = enableSingleItemHide;
23 | return this;
24 | }
25 |
26 |
27 | public Builder setAutoHide(boolean autoHide) {
28 | this.autoHide = autoHide;
29 | return this;
30 | }
31 |
32 | public Builder setLeftResId(final @DrawableRes int left) {
33 | this.left = left;
34 | return this;
35 | }
36 |
37 | public Builder setRightResId(final @DrawableRes int right) {
38 | this.right = right;
39 | return this;
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/AdjustableSlide.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.widget.ImageView;
7 |
8 | import com.hkm.slider.R;
9 |
10 | /**
11 | * Created by hesk on 18/4/16.
12 | */
13 | public class AdjustableSlide extends DefaultSliderView {
14 | public AdjustableSlide(Context context) {
15 | super(context);
16 | }
17 |
18 | @Override
19 | public View getView() {
20 | View v = LayoutInflater.from(mContext).inflate(R.layout.render_type_adjustable, null);
21 | ImageView target = (ImageView) v.findViewById(R.id.ns_slider_image);
22 | applyImageWithSmartBothAndNotifyHeight(v, target);
23 | // applyImageWithSmartBoth(v, target);
24 | return v;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/AdvancedTextSliderView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.widget.ImageView;
8 | import android.widget.TextView;
9 |
10 | import com.hkm.slider.R;
11 |
12 | /**
13 | * Created by hesk on 11/6/15.
14 | */
15 | public abstract class AdvancedTextSliderView extends BaseSliderView {
16 | public AdvancedTextSliderView(Context context) {
17 | super(context);
18 | }
19 |
20 | @SuppressLint("WrongViewCast")
21 | @Override
22 | public View getView() {
23 | View v = LayoutInflater.from(getContext()).inflate(renderedLayoutTextBanner(), null);
24 | final Image target = (Image) v.findViewById(R.id.ns_slider_image);
25 | final TV description = (TV) v.findViewById(R.id.ns_slider_desc);
26 | description.setText(getDescription());
27 | bindEventAndShowPicasso(v, target);
28 | return v;
29 | }
30 |
31 | protected abstract int renderedLayoutTextBanner();
32 | }
33 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/DefaultSliderView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.widget.ImageView;
7 | import com.hkm.slider.R;
8 |
9 | /**
10 | * a simple slider view, which just show an image. If you want to make your own slider view, just extend BaseSliderView, and implement getView() method.
11 | */
12 | public class DefaultSliderView extends BaseSliderView {
13 |
14 | public DefaultSliderView(Context context) {
15 | super(context);
16 | }
17 |
18 | @Override
19 | public View getView() {
20 | View v = LayoutInflater.from(mContext).inflate(R.layout.render_type_default, null);
21 | ImageView target = (ImageView) v.findViewById(R.id.ns_slider_image);
22 | bindEventAndShowPicasso(v, target);
23 | return v;
24 | }
25 |
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/MiniSliderFrame.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.view.View;
4 | import android.widget.ImageView;
5 | import android.widget.ProgressBar;
6 |
7 | /**
8 | * Created by zJJ on 7/13/2016.
9 | */
10 | public interface MiniSliderFrame {
11 | View getView();
12 |
13 | View getTouch();
14 |
15 | void setClickListener(final View.OnClickListener listner);
16 |
17 | ImageView getImageTarget();
18 |
19 | ProgressBar getLoadingBar();
20 |
21 | /**
22 | * all bundled string can be applied in here
23 | * @param word input word
24 | */
25 | void applyDescription(String word);
26 |
27 | /**
28 | * all bundled string can be applied in here
29 | * @param wordlist input word
30 | */
31 | void applyDescription(String[] wordlist);
32 | }
33 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/NewsFeedArticleView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.content.Context;
4 | import android.graphics.Typeface;
5 | import android.support.annotation.LayoutRes;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.widget.ProgressBar;
9 |
10 | import com.hkm.slider.R;
11 |
12 | /**
13 | * Created by hesk on 15/12/15.
14 | */
15 | public abstract class NewsFeedArticleView extends BaseSliderView {
16 | protected Typeface typeface_1, typeface_2;
17 | protected ProgressBar progressBar_circle;
18 |
19 | protected NewsFeedArticleView(Context context) {
20 | super(context);
21 | }
22 |
23 | public NewsFeedArticleView setDisplayFontName_1(String name) {
24 | typeface_1 = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + name);
25 | return this;
26 | }
27 |
28 | public NewsFeedArticleView setDisplayFontName_2(String name) {
29 | typeface_2 = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + name);
30 | return this;
31 | }
32 |
33 | public NewsFeedArticleView set_a() {
34 | return this;
35 | }
36 |
37 | public NewsFeedArticleView set_b() {
38 | return this;
39 | }
40 |
41 | public NewsFeedArticleView set_c() {
42 | return this;
43 | }
44 |
45 | public NewsFeedArticleView set_d() {
46 | return this;
47 | }
48 |
49 | /**
50 | * the extended class have to implement getView(), which is called by the adapter,
51 | * every extended class response to render their own view.
52 | *
53 | * @return View
54 | */
55 | @Override
56 | public View getView() {
57 | View layoutview = LayoutInflater.from(mContext).inflate(getLayoutHolder(), null);
58 | filter_apply_event_to_view(layoutview);
59 | return layoutview;
60 | }
61 |
62 | @LayoutRes
63 | protected abstract int getLayoutHolder();
64 |
65 | protected abstract void filter_apply_event_to_view(View root_view);
66 | }
67 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/SliderTypes/TextSliderView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.SliderTypes;
2 |
3 | import android.content.Context;
4 | import android.widget.ImageView;
5 | import android.widget.TextView;
6 |
7 | import com.hkm.slider.R;
8 |
9 | /**
10 | * This is a slider with a description TextView.
11 | */
12 | public class TextSliderView extends AdvancedTextSliderView {
13 | public TextSliderView(Context context) {
14 | super(context);
15 | }
16 |
17 | @Override
18 | protected int renderedLayoutTextBanner() {
19 | return R.layout.render_type_text;
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/EclairMotionEvent.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 | import android.view.MotionEvent;
3 |
4 | public class EclairMotionEvent extends WrapMotionEvent {
5 |
6 | protected EclairMotionEvent(MotionEvent event) {
7 | super(event);
8 | }
9 |
10 | public float getX(int pointerIndex) {
11 | return event.getX(pointerIndex);
12 | }
13 |
14 | public float getY(int pointerIndex) {
15 | return event.getY(pointerIndex);
16 | }
17 |
18 | public int getPointerCount() {
19 | return event.getPointerCount();
20 | }
21 |
22 | public int getPointerId(int pointerIndex) {
23 | return event.getPointerId(pointerIndex);
24 | }
25 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/FileTouchImageView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 | import android.content.Context;
3 | import android.graphics.Bitmap;
4 | import android.graphics.BitmapFactory;
5 | import android.util.AttributeSet;
6 | import java.io.File;
7 | import java.io.FileInputStream;
8 |
9 | public class FileTouchImageView extends UrlTouchImageView
10 | {
11 |
12 | public FileTouchImageView(Context ctx)
13 | {
14 | super(ctx);
15 |
16 | }
17 | public FileTouchImageView(Context ctx, AttributeSet attrs)
18 | {
19 | super(ctx, attrs);
20 | }
21 |
22 | public void setUrl(String imagePath)
23 | {
24 | // new ImageLoadTask().execute(imagePath);
25 | }
26 | //No caching load
27 | /* public class ImageLoadTask extends UrlTouchImageView.ImageLoadTask
28 | {
29 | @Override
30 | protected Bitmap doInBackground(String... strings) {
31 | String path = strings[0];
32 | Bitmap bm = null;
33 | try {
34 | File file = new File(path);
35 | FileInputStream fis = new FileInputStream(file);
36 | InputStreamWrapper bis = new InputStreamWrapper(fis, 8192, file.length());
37 | bis.setProgressListener(new InputStreamWrapper.InputStreamProgressListener()
38 | {
39 | @Override
40 | public void onProgress(float progressValue, long bytesLoaded,
41 | long bytesTotal)
42 | {
43 | publishProgress((int)(progressValue * 100));
44 | }
45 | });
46 | bm = BitmapFactory.decodeStream(bis);
47 | bis.close();
48 | } catch (Exception e) {
49 | e.printStackTrace();
50 | }
51 | return bm;
52 | }
53 | }*/
54 | }
55 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/GenerateParams.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 |
3 | import java.util.Locale;
4 |
5 | /**
6 | * Created by hesk on 8/3/16.
7 | */
8 | public class GenerateParams {
9 | final String text;
10 | final int color;
11 | final int background;
12 |
13 | public GenerateParams(String text, int color, int bg) {
14 | this.text = text;
15 | this.color = color;
16 | this.background = bg;
17 | }
18 |
19 | public String getId() {
20 | // TODO make sure it's unique for every possible instance of GenerateParams
21 | // because it will affect how the resulting bitmap is cached
22 | // the below is correct correct for the current fields, if those change this has to change
23 | return String.format(Locale.ROOT, "%s-%08x-%08x", text, color, background);
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/Generators.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 |
3 | import android.content.Context;
4 | import android.graphics.*;
5 | import android.view.*;
6 | import android.widget.*;
7 |
8 | import static android.util.TypedValue.*;
9 | import static android.view.View.MeasureSpec.*;
10 |
11 | /**
12 | * Created by hesk on 8/3/16.
13 | */
14 | public class Generators {
15 | /**
16 | * OP's original implementation fixed for real centering
17 | *
18 | * @param context context input
19 | * @param bitmap bitmpa
20 | * @param params other control factors
21 | * @return Bitmap object
22 | */
23 | public static Bitmap imageWithText(Context context, Bitmap bitmap, GenerateParams params) {
24 | TextView view = new TextView(context);
25 | view.setText(params.text);
26 | view.setTextColor(params.color);
27 | view.setBackgroundColor(params.background);
28 | view.setTypeface(null, Typeface.BOLD);
29 | view.setGravity(Gravity.CENTER);
30 | view.setTextSize(20 /*sp*/);
31 | Canvas canvas = new Canvas(bitmap);
32 | view.measure(makeMeasureSpec(canvas.getWidth(), EXACTLY), makeMeasureSpec(canvas.getHeight(), EXACTLY));
33 | view.layout(0, 0, canvas.getWidth(), canvas.getHeight());
34 | view.draw(canvas);
35 | return bitmap;
36 | }
37 |
38 | /**
39 | * Generate centered text without creating a View, more lightweight.
40 | * Consider http://stackoverflow.com/a/8369690/253468 for multiline support.
41 | *
42 | * @param context context input
43 | * @param bitmap bitmpa
44 | * @param params other control factors
45 | * @return Bitmap object
46 | */
47 | public static Bitmap imageWithTextNoLayout(Context context, Bitmap bitmap, GenerateParams params) {
48 | Paint paint = new Paint();
49 | paint.setColor(params.color);
50 | paint.setTextAlign(Paint.Align.CENTER); // text's anchor for the x given in drawText
51 | paint.setTextSize(applyDimension(COMPLEX_UNIT_SP, 20, context.getResources().getDisplayMetrics()));
52 | paint.setTypeface(Typeface.DEFAULT_BOLD);
53 |
54 | Canvas canvas = new Canvas(bitmap);
55 | canvas.drawColor(params.background);
56 | canvas.drawText(params.text, canvas.getWidth() / 2, canvas.getHeight() / 2, paint);
57 | return bitmap;
58 | }
59 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/InputStreamWrapper.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 | import java.io.BufferedInputStream;
3 | import java.io.IOException;
4 | import java.io.InputStream;
5 |
6 | public class InputStreamWrapper extends BufferedInputStream
7 | {
8 | protected long mContentLen, mBytesLoaded;
9 | protected InputStreamProgressListener mProgressListener;
10 | public InputStreamWrapper(InputStream in, int size, long contentLen)
11 | {
12 | super(in, size);
13 | mContentLen = contentLen;
14 | mBytesLoaded = 0;
15 | }
16 |
17 | @Override
18 | public synchronized int read(byte[] buffer, int offset, int byteCount)
19 | throws IOException
20 | {
21 | mBytesLoaded += byteCount;
22 | if (mProgressListener != null)
23 | {
24 | mProgressListener.onProgress(mBytesLoaded * 1.0f / mContentLen, mBytesLoaded, mContentLen);
25 | }
26 | return super.read(buffer, offset, byteCount);
27 | }
28 |
29 | public void setProgressListener(InputStreamProgressListener listener)
30 | {
31 | mProgressListener = listener;
32 | }
33 |
34 | public static interface InputStreamProgressListener
35 | {
36 | public void onProgress(float progressValue, long bytesLoaded, long bytesTotal);
37 | }
38 |
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/UrlTouchImageView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 |
3 | import android.content.Context;
4 | import android.graphics.Bitmap;
5 |
6 | import android.os.Build;
7 | import android.support.annotation.Nullable;
8 | import android.util.AttributeSet;
9 | import android.view.ViewTreeObserver;
10 |
11 | import android.widget.ImageView.ScaleType;
12 | import android.widget.ProgressBar;
13 | import android.widget.RelativeLayout;
14 |
15 | import com.bumptech.glide.Glide;
16 | import com.bumptech.glide.RequestBuilder;
17 | import com.bumptech.glide.load.DataSource;
18 | import com.bumptech.glide.load.engine.DiskCacheStrategy;
19 | import com.bumptech.glide.load.engine.GlideException;
20 | import com.bumptech.glide.request.RequestListener;
21 | import com.bumptech.glide.request.RequestOptions;
22 | import com.bumptech.glide.request.target.Target;
23 |
24 |
25 | public class UrlTouchImageView extends RelativeLayout {
26 | protected ProgressBar mProgressBar;
27 | protected TouchImageView mImageView;
28 |
29 | protected Context mContext;
30 | private String mImageUrl;
31 | protected RequestBuilder generator;
32 |
33 | public UrlTouchImageView(Context ctx) {
34 | super(ctx);
35 | mContext = ctx;
36 | init();
37 |
38 | }
39 |
40 | public UrlTouchImageView(Context ctx, AttributeSet attrs) {
41 | super(ctx, attrs);
42 | mContext = ctx;
43 | init();
44 | }
45 |
46 | public TouchImageView getImageView() {
47 | return mImageView;
48 | }
49 |
50 | @SuppressWarnings("deprecation")
51 | protected void init() {
52 | mImageView = new TouchImageView(mContext);
53 | LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
54 | mImageView.setLayoutParams(params);
55 | ViewTreeObserver vto = mImageView.getViewTreeObserver();
56 | /**
57 | * Callback method to be invoked when the global layout state or the visibility of views
58 | * within the view tree changes
59 | */
60 | glide3();
61 | vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
62 | public boolean onPreDraw() {
63 | mImageView.getViewTreeObserver().removeOnPreDrawListener(this);
64 | initLoadingRequest();
65 | return false;
66 | }
67 | });
68 | this.addView(mImageView);
69 | mProgressBar = new ProgressBar(mContext, null);
70 | params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
71 | params.addRule(RelativeLayout.CENTER_VERTICAL);
72 | params.setMargins(30, 0, 30, 0);
73 | mProgressBar.setLayoutParams(params);
74 | mProgressBar.setIndeterminate(false);
75 | mProgressBar.setMax(100);
76 | this.addView(mProgressBar);
77 | }
78 |
79 | private void initLoadingRequest() {
80 | generator.load(mImageUrl).into(mImageView);
81 | }
82 |
83 | private void glide3() {
84 | generator = Glide.with(mContext)
85 | .asBitmap()
86 | .apply(new RequestOptions()
87 | .diskCacheStrategy(DiskCacheStrategy.ALL)
88 | .skipMemoryCache(true)
89 | )
90 | .listener(new RequestListener() {
91 | @Override
92 | public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
93 | mImageView.setVisibility(GONE);
94 | return false;
95 | }
96 |
97 | @Override
98 | public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
99 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
100 | mProgressBar.animate().alpha(0).withEndAction(new Runnable() {
101 | @Override
102 | public void run() {
103 | mProgressBar.setVisibility(GONE);
104 | }
105 | });
106 | }
107 | return false;
108 | }
109 | });
110 | }
111 |
112 |
113 | public void setUrl(String imageUrl) {
114 | mImageUrl = imageUrl;
115 | }
116 |
117 | public void setScaleType(ScaleType scaleType) {
118 | mImageView.setScaleType(scaleType);
119 | }
120 |
121 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/TouchView/WrapMotionEvent.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.TouchView;
2 | import android.view.MotionEvent;
3 |
4 | public class WrapMotionEvent {
5 | protected MotionEvent event;
6 |
7 |
8 |
9 |
10 | protected WrapMotionEvent(MotionEvent event) {
11 | this.event = event;
12 | }
13 |
14 | static public WrapMotionEvent wrap(MotionEvent event) {
15 | try {
16 | return new EclairMotionEvent(event);
17 | } catch (VerifyError e) {
18 | return new WrapMotionEvent(event);
19 | }
20 | }
21 |
22 |
23 |
24 | public int getAction() {
25 | return event.getAction();
26 | }
27 |
28 | public float getX() {
29 | return event.getX();
30 | }
31 |
32 | public float getX(int pointerIndex) {
33 | verifyPointerIndex(pointerIndex);
34 | return getX();
35 | }
36 |
37 | public float getY() {
38 | return event.getY();
39 | }
40 |
41 | public float getY(int pointerIndex) {
42 | verifyPointerIndex(pointerIndex);
43 | return getY();
44 | }
45 |
46 | public int getPointerCount() {
47 | return 1;
48 | }
49 |
50 | public int getPointerId(int pointerIndex) {
51 | verifyPointerIndex(pointerIndex);
52 | return 0;
53 | }
54 |
55 | private void verifyPointerIndex(int pointerIndex) {
56 | if (pointerIndex > 0) {
57 | throw new IllegalArgumentException(
58 | "Invalid pointer index for Donut/Cupcake");
59 | }
60 | }
61 |
62 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/AccordionTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | /**
4 | * Created by daimajia on 14-5-29.
5 | */
6 | import android.support.v4.view.ViewCompat;
7 | import android.view.View;
8 |
9 |
10 | public class AccordionTransformer extends BaseTransformer {
11 |
12 | @Override
13 | protected void onTransform(View view, float position) {
14 | ViewCompat.setPivotX(view,position < 0 ? 0 : view.getWidth());
15 | ViewCompat.setScaleX(view, position < 0 ? 1f + position : 1f - position);
16 | }
17 |
18 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/BackgroundToForegroundTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class BackgroundToForegroundTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | final float height = view.getHeight();
12 | final float width = view.getWidth();
13 | final float scale = min(position < 0 ? 1f : Math.abs(1f - position), 0.5f);
14 |
15 | ViewCompat.setScaleX(view, scale);
16 | ViewCompat.setScaleY(view,scale);
17 | ViewCompat.setPivotX(view,width*0.5f);
18 | ViewCompat.setPivotY(view,height*0.5f);
19 | ViewCompat.setTranslationX(view,position < 0 ? width * position : -width * position * 0.25f);
20 | }
21 |
22 | private static final float min(float val, float min) {
23 | return val < min ? min : val;
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/CubeInTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class CubeInTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | // Rotate the fragment on the left or right edge
12 | ViewCompat.setPivotX(view,position > 0 ? 0 : view.getWidth());
13 | ViewCompat.setPivotY(view,0);
14 | ViewCompat.setRotation(view, -90f * position);
15 | }
16 |
17 | @Override
18 | public boolean isPagingEnabled() {
19 | return true;
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/CubeOutTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | /**
4 | * Created by hesk on 6/25/2015.
5 | */
6 |
7 | import android.support.v4.view.ViewCompat;
8 | import android.view.View;
9 |
10 | public class CubeOutTransformer extends BaseTransformer {
11 |
12 | @Override
13 | protected void onTransform(View view, float position) {
14 | ViewCompat.setPivotX(view, position < 0f ? view.getWidth() : 0f);
15 | ViewCompat.setPivotY(view, view.getHeight() * 0.5f);
16 | ViewCompat.setRotationY(view, 90f * position);
17 | }
18 |
19 | @Override
20 | public boolean isPagingEnabled() {
21 | return true;
22 | }
23 |
24 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/DefaultTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.view.View;
4 |
5 | public class DefaultTransformer extends BaseTransformer {
6 |
7 | @Override
8 | protected void onTransform(View view, float position) {
9 | }
10 |
11 | @Override
12 | public boolean isPagingEnabled() {
13 | return true;
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/DepthPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class DepthPageTransformer extends BaseTransformer {
8 |
9 | private static final float MIN_SCALE = 0.75f;
10 |
11 | @Override
12 | protected void onTransform(View view, float position) {
13 | if (position <= 0f) {
14 | ViewCompat.setTranslationX(view,0f);
15 | ViewCompat.setScaleX(view,1f);
16 | ViewCompat.setScaleY(view,1f);
17 | } else if (position <= 1f) {
18 | final float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position));
19 | ViewCompat.setAlpha(view,1-position);
20 | ViewCompat.setPivotY(view,0.5f * view.getHeight());
21 | ViewCompat.setTranslationX(view,view.getWidth() * - position);
22 | ViewCompat.setScaleX(view,scaleFactor);
23 | ViewCompat.setScaleY(view, scaleFactor);
24 | }
25 | }
26 |
27 | @Override
28 | protected boolean isPagingEnabled() {
29 | return true;
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/DrawFromBackTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 | /**
7 | * Created by hesk on 6/25/2015.
8 | */
9 | public class DrawFromBackTransformer extends BaseTransformer {
10 | private static final float MIN_SCALE = 0.75f;
11 | @Override
12 | protected void onTransform(View view, float position) {
13 | int pageWidth = view.getWidth();
14 | if (position < -1f || position > 1f) { // [-Infinity,-1)
15 | // This page is way off-screen to the left.
16 | ViewCompat.setAlpha(view, 0);
17 | return;
18 | }
19 | if (position <= 0) { // [-1,0]
20 | // Use the default slide transition when moving to the left page
21 | // Fade the page out.
22 | ViewCompat.setAlpha(view, 1 + position);
23 | // Counteract the default slide transition
24 | ViewCompat.setTranslationX(view, pageWidth * -position);
25 | // Scale the page down (between MIN_SCALE and 1)
26 | float scaleFactor = MIN_SCALE + (1f - MIN_SCALE) * (1f - Math.abs(position));
27 | ViewCompat.setScaleX(view, scaleFactor);
28 | ViewCompat.setScaleY(view, scaleFactor);
29 | return;
30 |
31 | }
32 | if (position > 0.5f && position <= 1) { // (0,1]
33 | // Fade the page out.
34 | ViewCompat.setAlpha(view, 0);
35 | // Counteract the default slide transition
36 | ViewCompat.setTranslationX(view, pageWidth * -position);
37 | return;
38 | }
39 | if (position > 0.3f && position <= 0.5f) { // (0,1]
40 | // Fade the page out.
41 | ViewCompat.setAlpha(view, 1);
42 | // Counteract the default slide transition
43 | ViewCompat.setTranslationX(view, pageWidth * position);
44 | float scaleFactor = MIN_SCALE;
45 | ViewCompat.setScaleX(view, scaleFactor);
46 | ViewCompat.setScaleY(view, scaleFactor);
47 | return;
48 | }
49 | if (position <= 0.3f) { // (0,1]
50 | // Fade the page out.
51 | ViewCompat.setAlpha(view, 1);
52 | // Counteract the default slide transition
53 | ViewCompat.setTranslationX(view, pageWidth * position);
54 | // Scale the page down (between MIN_SCALE and 1)
55 | float v = (float) (0.3f - position);
56 | v = v >= 0.25f ? 0.25f : v;
57 | float scaleFactor = MIN_SCALE + v;
58 | ViewCompat.setScaleX(view, scaleFactor);
59 | ViewCompat.setScaleY(view, scaleFactor);
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/FadeTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | /**
8 | * Created by realandylawton on 11/22/13.
9 | */
10 | public class FadeTransformer extends BaseTransformer {
11 |
12 | @Override
13 | protected void onTransform(View view, float position) {
14 |
15 | // Page is not an immediate sibling, just make transparent
16 | if(position < -1 || position > 1) {
17 | ViewCompat.setAlpha(view,0.6f);
18 | }
19 | // Page is sibling to left or right
20 | else if (position <= 0 || position <= 1) {
21 |
22 | // Calculate alpha. Position is decimal in [-1,0] or [0,1]
23 | float alpha = (position <= 0) ? position + 1 : 1 - position;
24 | ViewCompat.setAlpha(view, alpha);
25 |
26 | }
27 | // Page is active, make fully visible
28 | else if (position == 0) {
29 | ViewCompat.setAlpha(view,1);
30 | }
31 | }
32 |
33 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/FlipHorizontalTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class FlipHorizontalTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | final float rotation = 180f * position;
12 | ViewCompat.setAlpha(view, rotation > 90f || rotation < -90f ? 0 : 1);
13 | ViewCompat.setPivotY(view,view.getHeight()*0.5f);
14 | ViewCompat.setPivotX(view,view.getWidth() * 0.5f);
15 | ViewCompat.setRotationY(view,rotation);
16 | }
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/FlipPageViewTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.os.Build;
4 | import android.support.v4.view.ViewCompat;
5 | import android.view.View;
6 |
7 | import com.hkm.slider.Tricks.ViewPagerEx;
8 |
9 | public class FlipPageViewTransformer extends BaseTransformer {
10 |
11 | @Override
12 | protected void onTransform(View view, float position) {
13 | float percentage = 1 - Math.abs(position);
14 | if(Build.VERSION.SDK_INT >= 13){
15 | view.setCameraDistance(12000);
16 | }
17 | setVisibility(view, position);
18 | setTranslation(view);
19 | setSize(view, position, percentage);
20 | setRotation(view, position, percentage);
21 | }
22 |
23 | private void setVisibility(View page, float position) {
24 | if (position < 0.5 && position > -0.5) {
25 | page.setVisibility(View.VISIBLE);
26 | } else {
27 | page.setVisibility(View.INVISIBLE);
28 | }
29 | }
30 |
31 | private void setTranslation(View view) {
32 | ViewPagerEx viewPager = (ViewPagerEx) view.getParent();
33 | int scroll = viewPager.getScrollX() - view.getLeft();
34 | ViewCompat.setTranslationX(view, scroll);
35 | }
36 |
37 | private void setSize(View view, float position, float percentage) {
38 | ViewCompat.setScaleX(view,(position != 0 && position != 1) ? percentage : 1);
39 | ViewCompat.setScaleY(view,(position != 0 && position != 1) ? percentage : 1);
40 | }
41 |
42 | private void setRotation(View view, float position, float percentage) {
43 | if (position > 0) {
44 | ViewCompat.setRotationY(view,-180 * (percentage + 1));
45 | } else {
46 | ViewCompat.setRotationY(view,180 * (percentage + 1));
47 | }
48 | }
49 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/FlipVerticalTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 | /**
7 | * Created by hesk on 6/25/2015.
8 | */
9 | public class FlipVerticalTransformer extends BaseTransformer {
10 |
11 |
12 | @Override
13 | protected void onTransform(View view, float position) {
14 | final float rotation = -180f * position;
15 | ViewCompat.setAlpha(view, rotation > 90f || rotation < -90f ? 0f : 1f);
16 | ViewCompat.setPivotX(view, view.getWidth() * 0.5f);
17 | ViewCompat.setPivotY(view, view.getHeight() * 0.5f);
18 | ViewCompat.setRotationX(view, rotation);
19 |
20 | }
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/ForegroundToBackgroundTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class ForegroundToBackgroundTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | final float height = view.getHeight();
12 | final float width = view.getWidth();
13 | final float scale = min(position > 0 ? 1f : Math.abs(1f + position), 0.5f);
14 |
15 | ViewCompat.setScaleX(view, scale);
16 | ViewCompat.setScaleY(view,scale);
17 | ViewCompat.setPivotX(view,width * 0.5f);
18 | ViewCompat.setPivotY(view,height * 0.5f);
19 | ViewCompat.setTranslationX(view,position > 0 ? width * position : -width * position * 0.25f);
20 | }
21 |
22 | private static final float min(float val, float min) {
23 | return val < min ? min : val;
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/ParallaxPageTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.annotation.IdRes;
4 | import android.support.v4.view.ViewCompat;
5 | import android.view.View;
6 |
7 | /**
8 | * Created by hesk on 6/24/2015.
9 | */
10 | public class ParallaxPageTransformer extends BaseTransformer {
11 |
12 | private final int viewToParallax;
13 |
14 | public ParallaxPageTransformer(@IdRes final int viewToParallax) {
15 | this.viewToParallax = viewToParallax;
16 | }
17 |
18 | @Override
19 | protected void onTransform(View view, float position) {
20 | int pageWidth = view.getWidth();
21 | if (position < -1f) { // [-Infinity,-1)
22 | // This page is way off-screen to the left.
23 | ViewCompat.setAlpha(view, 1f);
24 | } else if (position <= 1f) { // [-1,1]
25 | ViewCompat.setTranslationX(view.findViewById(viewToParallax), -position * (pageWidth / 2)); //Half the normal speed
26 |
27 | } else { // (1,+Infinity]
28 | // This page is way off-screen to the right.
29 | ViewCompat.setAlpha(view, 1f);
30 | }
31 |
32 |
33 | }
34 |
35 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/RotateDownTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class RotateDownTransformer extends BaseTransformer {
8 |
9 | private static final float ROT_MOD = -15f;
10 |
11 | @Override
12 | protected void onTransform(View view, float position) {
13 | final float width = view.getWidth();
14 | final float height = view.getHeight();
15 | final float rotation = ROT_MOD * position * -1.25f;
16 |
17 | ViewCompat.setPivotX(view, width * 0.5f);
18 | ViewCompat.setPivotY(view,height);
19 | ViewCompat.setRotation(view,rotation);
20 | }
21 |
22 | @Override
23 | protected boolean isPagingEnabled() {
24 | return true;
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/RotateUpTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class RotateUpTransformer extends BaseTransformer {
8 |
9 | private static final float ROT_MOD = -15f;
10 |
11 | @Override
12 | protected void onTransform(View view, float position) {
13 | final float width = view.getWidth();
14 | final float rotation = ROT_MOD * position;
15 |
16 | ViewCompat.setPivotX(view, width * 0.5f);
17 | ViewCompat.setPivotY(view,0f);
18 | ViewCompat.setTranslationX(view,0f);
19 | ViewCompat.setRotation(view,rotation);
20 | }
21 |
22 | @Override
23 | protected boolean isPagingEnabled() {
24 | return true;
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/StackTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class StackTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | ViewCompat.setTranslationX(view, position < 0 ? 0f : -view.getWidth() * position);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/TabletTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.graphics.Camera;
4 | import android.graphics.Matrix;
5 | import android.support.v4.view.ViewCompat;
6 | import android.view.View;
7 |
8 |
9 | public class TabletTransformer extends BaseTransformer {
10 |
11 | private static final Matrix OFFSET_MATRIX = new Matrix();
12 | private static final Camera OFFSET_CAMERA = new Camera();
13 | private static final float[] OFFSET_TEMP_FLOAT = new float[2];
14 |
15 | @Override
16 | protected void onTransform(View view, float position) {
17 | final float rotation = (position < 0 ? 30f : -30f) * Math.abs(position);
18 |
19 | ViewCompat.setTranslationX(view,getOffsetXForRotation(rotation, view.getWidth(), view.getHeight()));
20 | ViewCompat.setPivotX(view, view.getWidth() * 0.5f);
21 | ViewCompat.setPivotY(view,0);
22 | ViewCompat.setRotationY(view,rotation);
23 | }
24 |
25 | protected static final float getOffsetXForRotation(float degrees, int width, int height) {
26 | OFFSET_MATRIX.reset();
27 | OFFSET_CAMERA.save();
28 | OFFSET_CAMERA.rotateY(Math.abs(degrees));
29 | OFFSET_CAMERA.getMatrix(OFFSET_MATRIX);
30 | OFFSET_CAMERA.restore();
31 |
32 | OFFSET_MATRIX.preTranslate(-width * 0.5f, -height * 0.5f);
33 | OFFSET_MATRIX.postTranslate(width * 0.5f, height * 0.5f);
34 | OFFSET_TEMP_FLOAT[0] = width;
35 | OFFSET_TEMP_FLOAT[1] = height;
36 | OFFSET_MATRIX.mapPoints(OFFSET_TEMP_FLOAT);
37 | return (width - OFFSET_TEMP_FLOAT[0]) * (degrees > 0.0f ? 1.0f : -1.0f);
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/ZoomInTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class ZoomInTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | final float scale = position < 0 ? position + 1f : Math.abs(1f - position);
12 | ViewCompat.setScaleX(view, scale);
13 | ViewCompat.setScaleY(view, scale);
14 | ViewCompat.setPivotX(view, view.getMeasuredWidth() * 0.5f);
15 | ViewCompat.setPivotY(view, view.getMeasuredHeight() * 0.5f);
16 | ViewCompat.setAlpha(view, position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/ZoomOutSlideTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class ZoomOutSlideTransformer extends BaseTransformer {
8 |
9 | private static final float MIN_SCALE = 0.85f;
10 | private static final float MIN_ALPHA = 0.5f;
11 |
12 | @Override
13 | protected void onTransform(View view, float position) {
14 | if (position >= -1 || position <= 1) {
15 | // Modify the default slide transition to shrink the page as well
16 | final float height = view.getHeight();
17 | final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
18 | final float vertMargin = height * (1 - scaleFactor) / 2;
19 | final float horzMargin = view.getWidth() * (1 - scaleFactor) / 2;
20 |
21 | // Center vertically
22 | ViewCompat.setPivotY(view, 0.5f * height);
23 |
24 |
25 | if (position < 0) {
26 | ViewCompat.setTranslationX(view,horzMargin - vertMargin / 2);
27 | } else {
28 | ViewCompat.setTranslationX(view,-horzMargin + vertMargin / 2);
29 | }
30 |
31 | // Scale the page down (between MIN_SCALE and 1)
32 | ViewCompat.setScaleX(view,scaleFactor);
33 | ViewCompat.setScaleY(view,scaleFactor);
34 |
35 | // Fade the page relative to its size.
36 | ViewCompat.setAlpha(view,MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
37 | }
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Transformers/ZoomOutTransformer.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Transformers;
2 |
3 | import android.support.v4.view.ViewCompat;
4 | import android.view.View;
5 |
6 |
7 | public class ZoomOutTransformer extends BaseTransformer {
8 |
9 | @Override
10 | protected void onTransform(View view, float position) {
11 | final float scale = 1f + Math.abs(position);
12 | ViewCompat.setScaleX(view, scale);
13 | ViewCompat.setScaleY(view,scale);
14 | ViewCompat.setPivotX(view,view.getWidth() * 0.5f);
15 | ViewCompat.setPivotY(view,view.getWidth() * 0.5f);
16 | ViewCompat.setAlpha(view,position < -1f || position > 1f ? 0f : 1f - (scale - 1f));
17 | if(position < -0.9){
18 | //-0.9 to prevent a small bug
19 | ViewCompat.setTranslationX(view,view.getWidth() * position);
20 | }
21 | }
22 |
23 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Tricks/AnimationHelper.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Tricks;
2 |
3 | import android.os.Build;
4 | import android.os.Handler;
5 | import android.support.annotation.Nullable;
6 | import android.view.View;
7 |
8 | import com.hkm.slider.SliderAdapter;
9 |
10 | /**
11 | * Created by hesk on 17/3/16.
12 | */
13 | public class AnimationHelper {
14 | public static long mTransitionAnimation = 1000;
15 |
16 | public static void notify_component(final @Nullable View mObject, final SliderAdapter mSliderAdapter, Handler postHandler, final int delayPost) {
17 | mTransitionAnimation = delayPost;
18 | notify_component(mObject, mSliderAdapter, postHandler);
19 | }
20 |
21 | public static void notify_component(final @Nullable View mObject, final SliderAdapter mSliderAdapter, Handler postHandler) {
22 | if (mObject == null) return;
23 | int count = mSliderAdapter.getCount();
24 | if (count <= 1) {
25 | postHandler.postDelayed(new Runnable() {
26 | @Override
27 | public void run() {
28 | if (mObject != null) {
29 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
30 | mObject.animate().alpha(0).withEndAction(new Runnable() {
31 | @Override
32 | public void run() {
33 | mObject.setVisibility(View.GONE);
34 | }
35 | });
36 | } else {
37 | mObject.animate().alpha(0);
38 | }
39 | }
40 | }
41 | }, mTransitionAnimation);
42 | } else {
43 | if (mObject.getVisibility() != View.GONE) return;
44 | postHandler.postDelayed(new Runnable() {
45 | @Override
46 | public void run() {
47 | if (mObject != null) {
48 | if (mObject.getVisibility() != View.GONE) return;
49 | mObject.setVisibility(View.VISIBLE);
50 | mObject.setAlpha(0);
51 | mObject.animate().alpha(1);
52 | }
53 | }
54 | }, mTransitionAnimation);
55 | }
56 | }
57 |
58 |
59 | }
60 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Tricks/ArrowControl.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Tricks;
2 |
3 | import android.view.View;
4 | import android.widget.ImageButton;
5 | import android.widget.ImageView;
6 |
7 | /**
8 | * Created by hesk on 15/4/16.
9 | * This is the smart arrow controller
10 | */
11 | public class ArrowControl {
12 | private ImageView left, right;
13 |
14 |
15 | private int mLWidthB, mRWidthB, count, current_position;
16 | boolean mLopen, mRopen, circular;
17 |
18 | public final void setCurrentPosition(final int p) {
19 | current_position = p;
20 | }
21 |
22 | public final void setTotal(final int total) {
23 | count = total;
24 | }
25 |
26 | public final void noSlideButtons() {
27 | left.setVisibility(View.GONE);
28 | right.setVisibility(View.GONE);
29 | mLopen = false;
30 | mRopen = false;
31 | }
32 |
33 | public final void IsCirularView(boolean b) {
34 | circular = b;
35 | }
36 |
37 | public final void notifyOnPageChanged() {
38 | if (count <= 1) {
39 | if (mLopen) {
40 | left.animate().translationX(-mLWidthB);
41 | mLopen = false;
42 | }
43 | if (mRopen) {
44 | right.animate().translationX(mRWidthB);
45 | mRopen = false;
46 | }
47 | } else {
48 | if (current_position == 0) {
49 | if (mLopen) {
50 | left.animate().translationX(-mLWidthB);
51 | mLopen = false;
52 | }
53 | } else if (current_position == count - 1) {
54 | if (mRopen) {
55 | right.animate().translationX(mRWidthB);
56 | mRopen = false;
57 | }
58 | } else {
59 | if (!mRopen) {
60 | right.animate().translationX(0);
61 | mRopen = true;
62 | }
63 | if (!mLopen) {
64 | left.animate().translationX(0);
65 | mLopen = true;
66 | }
67 | }
68 | }
69 | }
70 |
71 |
72 | public void setListeners(View.OnClickListener lefttrigger, View.OnClickListener righttrigger) {
73 | left.setOnClickListener(lefttrigger);
74 | right.setOnClickListener(righttrigger);
75 |
76 | mLopen = true;
77 | mRopen = true;
78 | }
79 |
80 | public ArrowControl(ImageView left_arrow, ImageView right_arrow) {
81 | left = left_arrow;
82 | right = right_arrow;
83 |
84 | mLopen = true;
85 | mRopen = true;
86 | mLWidthB = left.getDrawable().getIntrinsicWidth();
87 | mRWidthB = right.getDrawable().getIntrinsicWidth();
88 |
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Tricks/FixedSpeedScroller.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Tricks;
2 |
3 | import android.content.Context;
4 | import android.view.animation.Interpolator;
5 | import android.widget.Scroller;
6 |
7 | public class FixedSpeedScroller extends Scroller {
8 |
9 | private int mDuration = 1000;
10 |
11 | public FixedSpeedScroller(Context context) {
12 | super(context);
13 | }
14 |
15 | public FixedSpeedScroller(Context context, Interpolator interpolator) {
16 | super(context, interpolator);
17 | }
18 |
19 | public FixedSpeedScroller(Context context, Interpolator interpolator, int period){
20 | this(context,interpolator);
21 | mDuration = period;
22 | }
23 |
24 | @Override
25 | public void startScroll(int startX, int startY, int dx, int dy, int duration) {
26 | // Ignore received duration, use fixed one instead
27 | super.startScroll(startX, startY, dx, dy, mDuration);
28 | }
29 |
30 | @Override
31 | public void startScroll(int startX, int startY, int dx, int dy) {
32 | // Ignore received duration, use fixed one instead
33 | super.startScroll(startX, startY, dx, dy, mDuration);
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Tricks/InfinitePagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Tricks;
2 |
3 | import android.os.Parcelable;
4 | import android.support.v4.view.PagerAdapter;
5 | import android.util.Log;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import com.hkm.slider.SliderAdapter;
10 |
11 | /**
12 | * A PagerAdapter that wraps around another PagerAdapter to handle paging wrap-around.
13 | * Thanks to: https://github.com/antonyt/InfiniteViewPager
14 | */
15 | public class InfinitePagerAdapter extends PagerAdapter {
16 |
17 | private static final String TAG = "InfinitePagerAdapter";
18 | private static final boolean DEBUG = false;
19 |
20 | private SliderAdapter adapter;
21 |
22 | public InfinitePagerAdapter(SliderAdapter adapter) {
23 | this.adapter = adapter;
24 | }
25 |
26 | public SliderAdapter getRealAdapter(){
27 | return this.adapter;
28 | }
29 |
30 | @Override
31 | public int getCount() {
32 | // warning: scrolling to very high values (1,000,000+) results in
33 | // strange drawing behaviour
34 | return Integer.MAX_VALUE;
35 | }
36 |
37 | /**
38 | * @return the {@link #getCount()} result of the wrapped adapter
39 | */
40 | public int getRealCount() {
41 | return adapter.getCount();
42 | }
43 |
44 | @Override
45 | public Object instantiateItem(ViewGroup container, int position) {
46 | if(getRealCount() == 0){
47 | return null;
48 | }
49 | int virtualPosition = position % getRealCount();
50 | debug("instantiateItem: real position: " + position);
51 | debug("instantiateItem: virtual position: " + virtualPosition);
52 |
53 | // only expose virtual position to the inner adapter
54 | return adapter.instantiateItem(container, virtualPosition);
55 | }
56 |
57 | @Override
58 | public void destroyItem(ViewGroup container, int position, Object object) {
59 | if(getRealCount() == 0){
60 | return;
61 | }
62 | int virtualPosition = position % getRealCount();
63 | debug("destroyItem: real position: " + position);
64 | debug("destroyItem: virtual position: " + virtualPosition);
65 |
66 | // only expose virtual position to the inner adapter
67 | adapter.destroyItem(container, virtualPosition, object);
68 | }
69 |
70 | /*
71 | * Delegate rest of methods directly to the inner adapter.
72 | */
73 |
74 | @Override
75 | public void finishUpdate(ViewGroup container) {
76 | adapter.finishUpdate(container);
77 | }
78 |
79 | @Override
80 | public boolean isViewFromObject(View view, Object object) {
81 | return adapter.isViewFromObject(view, object);
82 | }
83 |
84 | @Override
85 | public void restoreState(Parcelable bundle, ClassLoader classLoader) {
86 | adapter.restoreState(bundle, classLoader);
87 | }
88 |
89 | @Override
90 | public Parcelable saveState() {
91 | return adapter.saveState();
92 | }
93 |
94 | @Override
95 | public void startUpdate(ViewGroup container) {
96 | adapter.startUpdate(container);
97 | }
98 |
99 | /*
100 | * End delegation
101 | */
102 |
103 | private void debug(String message) {
104 | if (DEBUG) {
105 | Log.d(TAG, message);
106 | }
107 | }
108 | }
--------------------------------------------------------------------------------
/library/src/main/java/com/hkm/slider/Tricks/InfiniteViewPager.java:
--------------------------------------------------------------------------------
1 | package com.hkm.slider.Tricks;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.PagerAdapter;
5 | import android.support.v4.view.ViewPager;
6 | import android.util.AttributeSet;
7 |
8 | import com.hkm.slider.Indicators.NumContainer;
9 |
10 | /**
11 | * A {@link ViewPager} that allows pseudo-infinite paging with a wrap-around effect. Should be used with an {@link
12 | * InfinitePagerAdapter}.
13 | */
14 | public class InfiniteViewPager extends ViewPagerEx {
15 |
16 | public InfiniteViewPager(Context context) {
17 | super(context);
18 | }
19 |
20 | public InfiniteViewPager(Context context, AttributeSet attrs) {
21 | super(context, attrs);
22 | }
23 |
24 | @Override
25 | public void setAdapter(PagerAdapter adapter) {
26 | super.setAdapter(adapter);
27 | // offset first element so that we can scroll to the left
28 | setCurrentItem(0);
29 | }
30 |
31 | public void setMargin(int dimension_width) {
32 | setPageMargin(dimension_width);
33 | }
34 |
35 | @Override
36 | public void setCurrentItem(int item) {
37 | // offset the current item to ensure there is space to scroll
38 | item = getOffsetAmount() + (item % getAdapter().getCount());
39 | super.setCurrentItem(item);
40 | }
41 |
42 | public void beforeItem() {
43 | super.setCurrentItemInternal(getCurrentItem() - 1, true, true);
44 | }
45 |
46 | public void nextItem() {
47 | super.setCurrentItem(getCurrentItem() + 1);
48 | }
49 |
50 | private int getOffsetAmount() {
51 | if (getAdapter() instanceof InfinitePagerAdapter) {
52 | InfinitePagerAdapter infAdapter = (InfinitePagerAdapter) getAdapter();
53 | // allow for 100 back cycles from the beginning
54 | // should be enough to create an illusion of infinity
55 | // warning: scrolling to very high values (1,000,000+) results in
56 | // strange drawing behaviour
57 | return infAdapter.getRealCount() * 100;
58 | } else {
59 | return 0;
60 | }
61 | }
62 |
63 |
64 | }
--------------------------------------------------------------------------------
/library/src/main/res/drawable/arrow_l.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/arrow_r.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/ic_warning_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/indicator_corner_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/shadow_hb_professional.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/library/src/main/res/drawable/shadow_upward.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_2_images.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_3_images.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_4_images.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
29 |
30 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_frame_2.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_frame_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/compact_frame_4.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
17 |
18 |
23 |
24 |
25 |
30 |
31 |
36 |
37 |
38 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/content_zoomable_slide.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
15 |
16 |
23 |
24 |
29 |
30 |
38 |
39 |
47 |
48 |
49 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/content_zoomble_slider_frame.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/default_num_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/defaultnumberindicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/hb_feature_slide.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
17 |
18 |
28 |
29 |
37 |
38 |
41 |
42 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/hb_feature_slide_ripple.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
17 |
18 |
23 |
24 |
28 |
29 |
39 |
40 |
48 |
49 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/indicator_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/render_type_adjustable.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
15 |
16 |
17 |
18 |
23 |
24 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/render_type_default.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
16 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/render_type_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
11 |
12 |
17 |
18 |
27 |
28 |
33 |
34 |
--------------------------------------------------------------------------------
/library/src/main/res/layout/slider_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
16 |
17 |
26 |
27 |
36 |
37 |
46 |
47 |
55 |
56 |
65 |
66 |
75 |
76 |
80 |
81 |
82 |
83 |
84 |
85 |
92 |
93 |
100 |
101 |
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xxhdpi/ns_left_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/library/src/main/res/mipmap-xxhdpi/ns_left_arrow.png
--------------------------------------------------------------------------------
/library/src/main/res/mipmap-xxhdpi/ns_right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/library/src/main/res/mipmap-xxhdpi/ns_right_arrow.png
--------------------------------------------------------------------------------
/library/src/main/res/values/color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #a460a342
4 | #fffbffca
5 | #fdffe1
6 | #ca000000
7 | #caff49db
8 | #ca71ff46
9 | #caf4fca1
10 | #ca42452c
11 |
12 | #00000000
13 | #7f000000
14 | #7f4d4d4d
15 | #cbffffff
16 |
17 |
--------------------------------------------------------------------------------
/library/src/main/res/values/dimen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 10.9dp
4 |
--------------------------------------------------------------------------------
/library/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/library/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Slider
3 | Do you want to save this image?
4 | Keep Image
5 | No
6 | ok
7 | This image is kept in your photo directory now.
8 | This image is not ready for download.
9 |
10 |
--------------------------------------------------------------------------------
/library/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
24 |
25 |
44 |
45 |
64 |
65 |
66 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/loghistory.md:
--------------------------------------------------------------------------------
1 | ##Log History
2 | ###v1.9.4
3 | - adjustable slide callback with the new height and determination of maximum height
4 |
5 | ###v1.9.3
6 | - android support library 24.0.0
7 | - update build tool
8 | - improve mini frame slider framework
9 | - [release apk](https://github.com/jjhesk/LoyalNativeSlider/releases/download/1.9.3/testApp-debug.apk)
10 |
11 | ###v1.9.1
12 | - update get color using contextcompat
13 |
14 | ###v1.9.0
15 | - android build tool 2.1.0
16 | - android support library 23.4.0
17 |
18 | ###v1.8.2
19 | - auto adjustment for each image height when scroll
20 | - android build tool 2.0.0
21 | - android support library 23.3.0
22 | - fixed bad image urls from the demo app
23 | - added demo example code for the new feature.
24 |
25 | ###v1.8.0
26 | - Adding call method to enable final detection of the tallest layout among all the loaded sliders. This method is only available thru using calls from `loadSliderList` and `addSliderList`. Because all slides needed to be rendered until all heights are found from each slide, there will be an slight delay from the first render of the sliderLayout. [issue #45](https://github.com/jjhesk/LoyalNativeSlider/issues/45)
27 |
28 | ###v1.6.0
29 | - add glide. As mentioned from all other recommendations, this library will be now the first choice of the support module to render images. That say all slider will support Gif files now.
30 | - support list insert feature. Instead of having slide to be added one by one, there is a new way to insert items as a list that will be more efficient.
31 |
32 | ###v1.5.5
33 | - [fixed all the related bugs](https://github.com/jjhesk/LoyalNativeSlider/releases/tag/1.5.5)
34 |
35 | ###v1.5.0
36 | - Zoomable view
37 | - news feed view
38 |
39 | ###v1.4.1
40 | - Add local storage enable for picasso
41 | - adapting multiple images in one slide config 2-4
42 |
--------------------------------------------------------------------------------
/scn/WW_PhoneKOT49Hhesk11262015103358.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/WW_PhoneKOT49Hhesk11262015103358.png
--------------------------------------------------------------------------------
/scn/WW_PhoneKOT49Hhesk11262015103406.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/WW_PhoneKOT49Hhesk11262015103406.png
--------------------------------------------------------------------------------
/scn/anglerMDB08Lhesk11262015104332.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/anglerMDB08Lhesk11262015104332.png
--------------------------------------------------------------------------------
/scn/anglerMDB08Lhesk11262015104346.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/anglerMDB08Lhesk11262015104346.png
--------------------------------------------------------------------------------
/scn/anglerMDB08Lhesk11262015104354.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/anglerMDB08Lhesk11262015104354.png
--------------------------------------------------------------------------------
/scn/device-2015-06-17-142823.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/device-2015-06-17-142823.png
--------------------------------------------------------------------------------
/scn/device-2015-06-17-150718.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/device-2015-06-17-150718.png
--------------------------------------------------------------------------------
/scn/device-2015-06-17-150829.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/scn/device-2015-06-17-150829.png
--------------------------------------------------------------------------------
/scripts/do.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | ./gradlew clean buildNeeded javadocJar dependencyUpdates -Drevision=release
--------------------------------------------------------------------------------
/scripts/maven.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | ./gradlew clean install
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':library', ':testApp', ':supportslidr'
2 |
--------------------------------------------------------------------------------
/supportslidr/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/supportslidr/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion ANDROID_BUILD_SDK_VERSION as int
5 | buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
6 |
7 | defaultConfig {
8 | minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int
9 | targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
10 | versionCode 1
11 | versionName "1.0"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled false
16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
17 | }
18 | }
19 | }
20 |
21 | dependencies {
22 | compile fileTree(dir: 'libs', include: ['*.jar'])
23 | testCompile 'junit:junit:4.12'
24 | compile project(':library')
25 | compile supportDependencies.appCompat
26 | compile 'com.r0adkll:slidableactivity:2.0.4'
27 | }
28 |
--------------------------------------------------------------------------------
/supportslidr/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 /Users/hesk/Library/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 |
--------------------------------------------------------------------------------
/supportslidr/src/androidTest/java/com/hkm/supportslidr/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.hkm.supportslidr;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/supportslidr/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/supportslidr/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | supportSlidr
3 |
4 |
--------------------------------------------------------------------------------
/supportslidr/src/test/java/com/hkm/supportslidr/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.hkm.supportslidr;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/testApp/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/testApp/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion ANDROID_BUILD_SDK_VERSION as int
5 | buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
6 |
7 | defaultConfig {
8 | applicationId "com.hkm.loyalns"
9 | minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION as int
10 | targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION as int
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | compileOptions {
21 | sourceCompatibility JavaVersion.VERSION_1_7
22 | }
23 | }
24 | repositories {
25 | jcenter()
26 | maven { url "http://dl.bintray.com/jjhesk/maven" }
27 | maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
28 | }
29 | dependencies {
30 | compile fileTree(include: ['*.jar'], dir: 'libs')
31 | compile supportDependencies.appCompat
32 | compile supportDependencies.design
33 | compile supportDependencies.support
34 | compile 'com.daimajia.androidanimations:library:1.0.3@aar'
35 |
36 | compile 'com.hkm.ezwebview:library:1.2.6'
37 | // compile 'com.hb:sdklibrary:0.6.0'
38 | testCompile 'junit:junit:4.12'
39 | compile project(':library')
40 | }
41 |
--------------------------------------------------------------------------------
/testApp/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 C:\tempAndroid\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 |
--------------------------------------------------------------------------------
/testApp/src/androidTest/java/com/hkm/loyalns/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns;
2 |
3 | import android.app.Application;
4 | import android.test.ApplicationTestCase;
5 |
6 | /**
7 | * Testing Fundamentals
8 | */
9 | public class ApplicationTest extends ApplicationTestCase {
10 | public ApplicationTest() {
11 | super(Application.class);
12 | }
13 | }
--------------------------------------------------------------------------------
/testApp/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
17 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
31 |
34 |
37 |
40 |
43 |
46 |
49 |
52 |
55 |
58 |
61 |
64 |
65 |
66 |
67 |
--------------------------------------------------------------------------------
/testApp/src/main/assets/q65.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/assets/q65.jpg
--------------------------------------------------------------------------------
/testApp/src/main/assets/q66.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/assets/q66.jpg
--------------------------------------------------------------------------------
/testApp/src/main/assets/q67.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/assets/q67.jpg
--------------------------------------------------------------------------------
/testApp/src/main/assets/q68.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/assets/q68.jpg
--------------------------------------------------------------------------------
/testApp/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/TheMain.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns;
2 |
3 | import android.content.Intent;
4 | import android.net.Uri;
5 | import android.os.Bundle;
6 | import android.support.v7.app.AppCompatActivity;
7 | import android.view.View;
8 | import android.widget.AdapterView;
9 | import android.widget.ArrayAdapter;
10 | import android.widget.ListView;
11 |
12 | import com.hkm.loyalns.demos.BigScreenDL;
13 | import com.hkm.loyalns.demos.BigScreenDemo;
14 | import com.hkm.loyalns.demos.DelayInitalzation;
15 | import com.hkm.loyalns.demos.ExampleClassic;
16 | import com.hkm.loyalns.demos.MultSections;
17 | import com.hkm.loyalns.demos.NewsArticle;
18 | import com.hkm.loyalns.demos.SliderAdjust1;
19 | import com.hkm.loyalns.demos.ZoomScreenSlider;
20 | import com.hkm.loyalns.demos.ZoomView_Three;
21 | import com.hkm.loyalns.demos.ZoomView_Single;
22 | import com.hkm.loyalns.demos.ZoomViewPager2;
23 | import com.hkm.loyalns.demos.SliderAdjust2;
24 |
25 | import java.util.ArrayList;
26 | import java.util.LinkedHashMap;
27 | import java.util.Map;
28 |
29 | /**
30 | * Created by hesk on 7/3/16.
31 | */
32 | public class TheMain extends AppCompatActivity implements AdapterView.OnItemClickListener {
33 | LinkedHashMap data = new LinkedHashMap<>();
34 | ListView mList;
35 | ArrayList o = new ArrayList<>();
36 |
37 | @Override
38 | protected void onCreate(Bundle savedInstanceState) {
39 | super.onCreate(savedInstanceState);
40 | setContentView(R.layout.main_menu);
41 |
42 | mList = (ListView) findViewById(android.R.id.list);
43 | ArrayList items = new ArrayList<>();
44 | initList();
45 | for (Map.Entry entry : data.entrySet()) {
46 | String key = entry.getKey();
47 | items.add(key);
48 | o.add(entry.getValue());
49 | }
50 | mList.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, items));
51 | mList.setOnItemClickListener(this);
52 | }
53 |
54 |
55 | @Override
56 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
57 | Intent intent = new Intent(this, o.get(position));
58 | startActivity(intent);
59 | }
60 |
61 | Intent intent;
62 |
63 | private void gotoWeb() {
64 | intent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.urlgithub)));
65 | startActivity(intent);
66 | }
67 |
68 |
69 | public void initList() {
70 |
71 | data.put("Full screen", BigScreenDemo.class);
72 | data.put("Zoom in&out", ZoomScreenSlider.class);
73 | data.put("News Pager", NewsArticle.class);
74 | data.put("MultiSection - allow multiple mini sliders to fit into a single large slide. The max slides is suggested to 4", MultSections.class);
75 | data.put("Classic Example - with content height adjustment", ExampleClassic.class);
76 | data.put("Zoom View Pager Local Files", ZoomViewPager2.class);
77 | data.put("Zoom View Pager Load URL Single", ZoomView_Three.class);
78 | data.put("Zoom View Pager With Single Page", ZoomView_Single.class);
79 | data.put("Single Slide - debug on single slide with the arrows disappearing on the screen", BigScreenDL.class);
80 | data.put("Adjustable Slide View fit on screen demo", SliderAdjust1.class);
81 | data.put("Adjustable Slide + Real world application reading app demo", SliderAdjust2.class);
82 | data.put("debug time delay initialization", DelayInitalzation.class);
83 |
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/Util/ChildAnimationExample.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.Util;
2 |
3 | import android.util.Log;
4 | import android.view.View;
5 |
6 | import com.daimajia.androidanimations.library.attention.StandUpAnimator;
7 | import com.hkm.loyalns.R;
8 | import com.hkm.slider.Animations.BaseAnimationInterface;
9 |
10 | public class ChildAnimationExample implements BaseAnimationInterface {
11 |
12 | private final static String TAG = "ChildAnimationExample";
13 |
14 | @Override
15 | public void onPrepareCurrentItemLeaveScreen(View current) {
16 | View descriptionLayout = current.findViewById(R.id.ns_desc_frame);
17 | if (descriptionLayout != null) {
18 | current.findViewById(R.id.ns_desc_frame).setVisibility(View.INVISIBLE);
19 | }
20 | Log.e(TAG, "onPrepareCurrentItemLeaveScreen called");
21 | }
22 |
23 | @Override
24 | public void onPrepareNextItemShowInScreen(View next) {
25 | View descriptionLayout = next.findViewById(R.id.ns_desc_frame);
26 | if (descriptionLayout != null) {
27 | next.findViewById(R.id.ns_desc_frame).setVisibility(View.INVISIBLE);
28 | }
29 | Log.e(TAG, "onPrepareNextItemShowInScreen called");
30 | }
31 |
32 | @Override
33 | public void onCurrentItemDisappear(View view) {
34 | Log.e(TAG, "onCurrentItemDisappear called");
35 | }
36 |
37 | @Override
38 | public void onNextItemAppear(View view) {
39 |
40 | View descriptionLayout = view.findViewById(R.id.ns_desc_frame);
41 | if (descriptionLayout != null) {
42 | view.findViewById(R.id.ns_desc_frame).setVisibility(View.VISIBLE);
43 | // ValueAnimator animator = ObjectAnimator.ofFloat(
44 | // descriptionLayout, "y", -descriptionLayout.getHeight(),
45 | // 0).setDuration(500);
46 | // animator.start();
47 | // new BounceInAnimator().animate(descriptionLayout);
48 | new StandUpAnimator().animate(descriptionLayout);
49 | }
50 | Log.e(TAG, "onCurrentItemDisappear called");
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/Util/DataProvider.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.Util;
2 |
3 |
4 | import com.hkm.loyalns.R;
5 |
6 | import java.util.HashMap;
7 | import java.util.LinkedHashMap;
8 | import java.util.Map;
9 | import java.util.Random;
10 |
11 | /**
12 | * Created by hesk on 19/8/15.
13 | */
14 | public class DataProvider {
15 | public static HashMap getFileSrcHorizontal() {
16 | HashMap file_maps = new HashMap();
17 | file_maps.put("Hannibal", R.drawable.hannibal);
18 | file_maps.put("Big Bang Theory", R.drawable.bigbang);
19 | file_maps.put("House of Cards", R.drawable.house);
20 | file_maps.put("Game of Thrones", R.drawable.game_of_thrones);
21 | return file_maps;
22 | }
23 |
24 | public static HashMap getDataUrlSource() {
25 | HashMap url_maps = new HashMap();
26 | url_maps.put("Hannibal", "http://static2.hypable.com/wp-content/uploads/2013/12/hannibal-season-2-release-date.jpg");
27 | url_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
28 | url_maps.put("House of Cards", "http://cdn3.nflximg.net/images/3093/2043093.jpg");
29 | url_maps.put("Game of Thrones", "http://images.boomsbeat.com/data/images/full/19640/game-of-thrones-season-4-jpg.jpg");
30 | return url_maps;
31 | }
32 |
33 | public static HashMap getVerticalDataSrc() {
34 |
35 | HashMap file_maps = new HashMap();
36 | file_maps.put("Choro Q N64", "file:///android_asset/q65.jpg");
37 | file_maps.put("Choro 4 HQ PS2", "file:///android_asset/q66.jpg");
38 | file_maps.put("Choro Rainbow Wings", "file:///android_asset/q67.jpg");
39 | file_maps.put("Choro Q Boat Race", "file:///android_asset/q68.jpg");
40 | return file_maps;
41 |
42 | }
43 |
44 | public static HashMap getSingle() {
45 | HashMap file_maps = new HashMap();
46 | file_maps.put("Big Bang Theory", "http://tvfiles.alphacoders.com/100/hdclearart-10.png");
47 | return file_maps;
48 |
49 | }
50 |
51 | public static Map.Entry getRandomSingle() {
52 | int total = getVerticalDataSrc().size();
53 | Random n = new Random();
54 | int out = n.nextInt(total);
55 | LinkedHashMap f = new LinkedHashMap<>(getVerticalDataSrc());
56 | final Map.Entry[] test = new Map.Entry[total];
57 | f.entrySet().toArray(test);
58 | return test[out];
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/DelayInitalzation.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.os.Handler;
4 |
5 | import com.hkm.slider.SliderLayout;
6 |
7 | /**
8 | * Created by hesk on 30/5/16.
9 | */
10 | public class DelayInitalzation extends SliderAdjust2 {
11 | private Handler posthandler = new Handler();
12 | private Runnable t = new Runnable() {
13 | @Override
14 | public void run() {
15 | realSetupSlider();
16 | mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
17 | }
18 | };
19 |
20 | @Override
21 | protected void setupSlider() {
22 | posthandler.postDelayed(t, 3000);
23 | }
24 |
25 | @Override
26 | protected void onDestroy() {
27 | super.onDestroy();
28 | posthandler.removeCallbacks(t);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/MainActivityFragment.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.support.v4.app.Fragment;
4 | import android.os.Bundle;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import com.hkm.loyalns.R;
10 |
11 | /**
12 | * A placeholder fragment containing a simple view.
13 | */
14 | public class MainActivityFragment extends Fragment {
15 |
16 | public MainActivityFragment() {
17 | }
18 |
19 | @Override
20 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
21 | Bundle savedInstanceState) {
22 | return inflater.inflate(R.layout.fragment_main, container, false);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/NewsArticle.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | /**
4 | * Created by hesk on 15/12/15.
5 | * Test of API on the news feed
6 | */
7 | public class NewsArticle extends BigScreenDemo {
8 | // protected HBEditorialClient clientApi;
9 |
10 | /* protected void defaultCompleteSlider(SliderLayout slide, List list) {
11 | Iterator it = list.iterator();
12 | while (it.hasNext()) {
13 | ArticleData article = it.next();
14 | NewsBurner textSliderView = new NewsBurner(this);
15 |
16 | textSliderView
17 | //feed
18 | .setID(article.getId())
19 | .setPath(article._links.getSelf());
20 |
21 | //add your extra information
22 | slide.addSlider(textSliderView);
23 |
24 | }
25 | }*/
26 |
27 | /* protected Callback res = new Callback() {
28 | @Override
29 | public void success(ResponsePostW responsePostW, Response response) {
30 | try {
31 | defaultCompleteSlider(mDemoSlider, responsePostW.postList.getArticles());
32 | } catch (Exception e) {
33 | e.printStackTrace();
34 | }
35 | }
36 |
37 | @Override
38 | public void failure(RetrofitError error) {
39 | error.printStackTrace();
40 | }
41 | };*/
42 |
43 | @Override
44 | protected boolean shouldRequestAPIBeforeLayoutRender() {
45 | // clientApi = HBEditorialClient.getInstance(this);
46 | try {
47 | // clientApi.createFeedInterface().the_recent_page(1, res);
48 | } catch (Exception e) {
49 | e.printStackTrace();
50 | }
51 |
52 | return true;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/SliderAdjust1.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.support.v4.view.animation.LinearOutSlowInInterpolator;
4 | import android.view.View;
5 |
6 | import com.hkm.loyalns.R;
7 | import com.hkm.loyalns.mod.BaseApp;
8 | import com.hkm.slider.Animations.DescriptionAnimation;
9 | import com.hkm.slider.SliderLayout;
10 | import com.hkm.slider.SliderTypes.AdjustableSlide;
11 | import com.hkm.slider.SliderTypes.BaseSliderView;
12 | import com.hkm.slider.TransformerL;
13 |
14 | import java.util.ArrayList;
15 |
16 | /**
17 | * Created by hesk on 15/4/16.
18 | */
19 | public class SliderAdjust1 extends BaseApp {
20 | @Override
21 | protected void setupSlider() {
22 | mDemoSlider.setPresetTransformer(TransformerL.Default);
23 | mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
24 | mDemoSlider.setCustomAnimation(new DescriptionAnimation());
25 | mDemoSlider.setDuration(20000);
26 | mDemoSlider.addOnPageChangeListener(this);
27 | mDemoSlider.setOffscreenPageLimit(3);
28 | mDemoSlider.setSliderTransformDuration(400, new LinearOutSlowInInterpolator());
29 | mDemoSlider.getPagerIndicator().setDefaultIndicatorColorRes(R.color.red_pink_26, R.color.red_pink_27);
30 | mDemoSlider.setAutoAdjustImageByHeight();
31 | String[] urls = {
32 | getString(R.string.hl_image_01),
33 | getString(R.string.hl_image_02),
34 | getString(R.string.hl_image_03),
35 | getString(R.string.hl_image_04),
36 | getString(R.string.hl_image_05),
37 | getString(R.string.hl_image_07),
38 | getString(R.string.hl_image_06),
39 | getString(R.string.hl_image_09),
40 | getString(R.string.hl_image_10),
41 | getString(R.string.hl_image_13),
42 |
43 | getString(R.string.star_url_1),
44 | getString(R.string.star_url_2),
45 | getString(R.string.star_url_3),
46 | getString(R.string.star_url_4),
47 | getString(R.string.star_url_5)
48 | };
49 |
50 | ArrayList list = new ArrayList<>();
51 | for (int h = 0; h < urls.length; h++) {
52 | AdjustableSlide textSliderView = new AdjustableSlide(this);
53 | // initialize a SliderLayout
54 | textSliderView
55 | .image(urls[h])
56 | .setScaleType(BaseSliderView.ScaleType.Fit)
57 | .enableSaveImageByLongClick(getFragmentManager())
58 | .setOnSliderClickListener(this);
59 | //add your extra information
60 | list.add(textSliderView);
61 | }
62 | mFrameMain.setVisibility(View.VISIBLE);
63 | mDemoSlider.loadSliderList(list);
64 |
65 | }
66 |
67 | @Override
68 | protected int getActivityMainLayoutId() {
69 | return R.layout.bouncer_slider;
70 | }
71 |
72 | @Override
73 | public void onSliderClick(BaseSliderView coreSlider) {
74 |
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/SliderAdjust2.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.view.animation.LinearOutSlowInInterpolator;
5 | import android.util.Log;
6 | import android.widget.TextView;
7 |
8 | import com.hkm.loyalns.R;
9 | import com.hkm.loyalns.mod.BaseApp;
10 | import com.hkm.slider.Animations.DescriptionAnimation;
11 | import com.hkm.slider.SliderLayout;
12 | import com.hkm.slider.SliderTypes.AdjustableSlide;
13 | import com.hkm.slider.SliderTypes.BaseSliderView;
14 | import com.hkm.slider.TransformerL;
15 |
16 | import java.util.ArrayList;
17 |
18 | /**
19 | * Created by hesk on 21/4/16.
20 | */
21 | public class SliderAdjust2 extends BaseApp {
22 | protected void realSetupSlider() {
23 | mDemoSlider.setPresetTransformer(TransformerL.Default);
24 | mDemoSlider.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);
25 | mDemoSlider.setCustomAnimation(new DescriptionAnimation());
26 | mDemoSlider.setDuration(40000);
27 | mDemoSlider.addOnPageChangeListener(this);
28 | mDemoSlider.setOffscreenPageLimit(3);
29 | mDemoSlider.setSliderTransformDuration(400, new LinearOutSlowInInterpolator());
30 | mDemoSlider.getPagerIndicator().setDefaultIndicatorColorRes(R.color.red_pink_26, R.color.red_pink_27);
31 | mDemoSlider.setDisablePageIndicator();
32 | mDemoSlider.setAutoAdjustImageByHeight();
33 | String[] urls = {
34 | getString(R.string.hl_image_01),
35 | getString(R.string.hl_image_02),
36 | getString(R.string.hl_image_03),
37 | getString(R.string.hl_image_04),
38 | getString(R.string.hl_image_11),
39 | getString(R.string.hl_image_12),
40 | getString(R.string.hl_image_08),
41 | getString(R.string.hl_image_07),
42 | getString(R.string.hl_image_06),
43 | getString(R.string.hl_image_09),
44 | getString(R.string.hl_image_10),
45 | getString(R.string.hl_image_13),
46 | getString(R.string.star_url_1),
47 | getString(R.string.star_url_2),
48 | getString(R.string.star_url_3),
49 | getString(R.string.star_url_4),
50 | getString(R.string.star_url_5)
51 | };
52 |
53 | ArrayList list = new ArrayList<>();
54 | for (int h = 0; h < urls.length; h++) {
55 | AdjustableSlide textSliderView = new AdjustableSlide(this);
56 | // initialize a SliderLayout
57 | textSliderView
58 | .image(urls[h])
59 | .setScaleType(BaseSliderView.ScaleType.Fit)
60 | .enableSaveImageByLongClick(getFragmentManager())
61 | .setOnSliderClickListener(this);
62 | //add your extra information
63 | list.add(textSliderView);
64 | }
65 | // mFrameMain.setVisibility(View.VISIBLE);
66 | mDemoSlider.setOnImageLoadWithAdjustableHeightListener(new SliderLayout.OnImageLoadWithAdjustableHeight() {
67 | @Override
68 | public void onNotified(int new_height, boolean isMax) {
69 | StringBuilder sb = new StringBuilder();
70 | sb.append("confirmed new height: ");
71 | sb.append(new_height);
72 | sb.append("\n");
73 | sb.append("Is max height has reached: ");
74 | sb.append(isMax);
75 | mdisplay_num_text.setText(sb.toString());
76 | }
77 | });
78 |
79 | mDemoSlider.loadSliderList(list);
80 | }
81 |
82 | @Override
83 | protected void setupSlider() {
84 | realSetupSlider();
85 | }
86 |
87 | @Override
88 | protected int getActivityMainLayoutId() {
89 | return R.layout.test_adjustment_height;
90 | }
91 |
92 | @Override
93 | public void onSliderClick(BaseSliderView coreSlider) {
94 |
95 | }
96 |
97 | private TextView mdisplay_num_text;
98 |
99 | @Override
100 | protected void onCreate(Bundle savedInstanceState) {
101 | super.onCreate(savedInstanceState);
102 | mdisplay_num_text = (TextView) findViewById(R.id.display_num_text);
103 | }
104 | }
105 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/ZoomScreenSlider.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.annotation.TargetApi;
4 | import android.os.Build;
5 | import android.widget.Toast;
6 |
7 | import com.hkm.loyalns.demos.BigScreenDemo;
8 | import com.hkm.slider.SliderLayout;
9 | import com.hkm.slider.SliderTypes.BaseSliderView;
10 | import com.hkm.slider.SliderTypes.ZoomableView;
11 |
12 | import java.util.HashMap;
13 |
14 | /**
15 | * Created by hesk on 15/12/15.
16 | */
17 | public class ZoomScreenSlider extends BigScreenDemo {
18 |
19 | @TargetApi(Build.VERSION_CODES.HONEYCOMB)
20 | protected void defaultCompleteSlider(final SliderLayout slide, final HashMap maps) {
21 | for (String name : maps.keySet()) {
22 | ZoomableView zoomer = new ZoomableView(true, this);
23 | // initialize a SliderLayout
24 | zoomer
25 | //ZoomableView configurations
26 | .setInitalZoomFactor(1.f)
27 | //BaseSlider configurations
28 | .description(name)
29 | .image(maps.get(name))
30 | .enableImageLocalStorage()
31 | .setScaleType(BaseSliderView.ScaleType.FitCenterCrop)
32 | .setOnSliderClickListener(this);
33 | //add your extra information
34 | zoomer.getBundle().putString("extra", name);
35 | slide.addSlider(zoomer);
36 | }
37 | slide.stopAutoCycle();
38 | slide.setCurrentPosition(1);
39 | }
40 |
41 | @Override
42 | public void onSliderClick(BaseSliderView coreSlider) {
43 | Toast.makeText(this, "Clicked Item", Toast.LENGTH_SHORT);
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/ZoomViewPager2.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import android.widget.Toast;
4 |
5 | import com.hkm.loyalns.mod.NsZoomable;
6 | import com.hkm.slider.GalleryWidget.BasePagerAdapter;
7 | import com.hkm.slider.GalleryWidget.FilePagerAdapter;
8 | import com.hkm.slider.GalleryWidget.GalleryViewPager;
9 |
10 | import java.io.File;
11 | import java.io.FileOutputStream;
12 | import java.io.IOException;
13 | import java.io.InputStream;
14 | import java.io.OutputStream;
15 | import java.util.ArrayList;
16 | import java.util.List;
17 |
18 | /**
19 | * Created by hesk on 8/3/16.
20 | */
21 | public class ZoomViewPager2 extends NsZoomable {
22 | private void copy(InputStream in, File dst) throws IOException {
23 | OutputStream out = new FileOutputStream(dst);
24 | // Transfer bytes from in to out
25 | byte[] buf = new byte[1024];
26 | int len;
27 | while ((len = in.read(buf)) > 0) {
28 | out.write(buf, 0, len);
29 | }
30 | in.close();
31 | out.close();
32 | }
33 |
34 | private FilePagerAdapter getImages() {
35 | String[] urls = null;
36 | List items = new ArrayList();
37 | try {
38 | urls = getAssets().list("");
39 |
40 | for (String filename : urls) {
41 | if (filename.matches(".+\\.jpg")) {
42 | String path = getFilesDir() + "/" + filename;
43 | copy(getAssets().open(filename), new File(path));
44 | items.add(path);
45 | }
46 | }
47 | } catch (IOException e) {
48 | e.printStackTrace();
49 | }
50 | FilePagerAdapter pagerAdapter = new FilePagerAdapter(this, items);
51 | return pagerAdapter;
52 | }
53 |
54 | @Override
55 | protected void startViewPager(final GalleryViewPager mViewpager) {
56 | FilePagerAdapter pagerAdapter = getImages();
57 | pagerAdapter.setOnItemChangeListener(new BasePagerAdapter.OnItemChangeListener() {
58 | @Override
59 | public void onItemChange(int currentPosition) {
60 | Toast.makeText(ZoomViewPager2.this, "Current item is " + currentPosition, Toast.LENGTH_SHORT).show();
61 | }
62 | });
63 | mViewpager.setOffscreenPageLimit(3);
64 | mViewpager.setAdapter(pagerAdapter);
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/ZoomView_Single.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import com.hkm.loyalns.mod.NsZoomable;
4 | import com.hkm.slider.GalleryWidget.GalleryViewPager;
5 | import com.hkm.slider.GalleryWidget.UrlPagerAdapter;
6 |
7 | import java.util.ArrayList;
8 | import java.util.Collections;
9 | import java.util.List;
10 |
11 | /**
12 | * Created by hesk on 17/3/16.
13 | */
14 | public class ZoomView_Single extends NsZoomable {
15 | @Override
16 | protected void startViewPager(GalleryViewPager mViewpager) {
17 | String[] urls = {
18 | "https://drscdn.500px.org/photo/139154171/m%3D900/d5649ca460658ac3e82f7a2b50a5a3e6",
19 | };
20 | List items = new ArrayList();
21 | Collections.addAll(items, urls);
22 | UrlPagerAdapter pagerAdapter = new UrlPagerAdapter(this, items);
23 | mViewpager.setOffscreenPageLimit(3);
24 | mViewpager.setAdapter(pagerAdapter);
25 | mViewpager.setCurrentItem(3);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/demos/ZoomView_Three.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.demos;
2 |
3 | import com.hkm.loyalns.mod.NsZoomable;
4 | import com.hkm.slider.GalleryWidget.GalleryViewPager;
5 | import com.hkm.slider.GalleryWidget.UrlPagerAdapter;
6 |
7 | import java.util.ArrayList;
8 | import java.util.Collections;
9 | import java.util.List;
10 |
11 | /**
12 | * Created by hesk on 8/3/16.
13 | */
14 | public class ZoomView_Three extends NsZoomable {
15 | @Override
16 | protected void startViewPager(GalleryViewPager mViewpager) {
17 | String[] urls = {
18 | // "http://pcdn.500px.net/35939982/127d53ceac436e2e17a11ea42bb2cd7719b9f1e1/4.jpg",
19 | "https://drscdn.500px.org/photo/149207821/m%3D900/61196063c2685f6c3461bbc8568b3a2e",
20 | // special url with error
21 | "https://drscdn.500px.org/photo/144545025/m%3D900/aa1681951f730749a27dc1aec604ca4f",
22 | "https://drscdn.500px.org/photo/138365879/m%3D900/a349013757f0766bccd3024e237c3601",
23 | };
24 | //https://drscdn.500px.org/photo/139154171/m%3D900/d5649ca460658ac3e82f7a2b50a5a3e6
25 |
26 | List items = new ArrayList();
27 | Collections.addAll(items, urls);
28 | UrlPagerAdapter pagerAdapter = new UrlPagerAdapter(this, items);
29 | mViewpager.setOffscreenPageLimit(3);
30 | mViewpager.setAdapter(pagerAdapter);
31 | mViewpager.setCurrentItem(3);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/mod/BaseApp.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.mod;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.LayoutRes;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.util.Log;
7 | import android.widget.RelativeLayout;
8 |
9 | import com.hkm.loyalns.R;
10 | import com.hkm.slider.SliderLayout;
11 | import com.hkm.slider.SliderTypes.BaseSliderView;
12 | import com.hkm.slider.Tricks.ViewPagerEx;
13 |
14 | /**
15 | * Created by hesk on 24/11/15.
16 | */
17 | public abstract class BaseApp extends AppCompatActivity implements BaseSliderView.OnSliderClickListener, ViewPagerEx.OnPageChangeListener {
18 | @Override
19 | protected void onStop() {
20 | // To prevent a memory leak on rotation, make sure to call stopAutoCycle() on the slider before activity or fragment is destroyed
21 | mDemoSlider.stopAutoCycle();
22 | super.onStop();
23 | }
24 |
25 | protected SliderLayout mDemoSlider;
26 | protected RelativeLayout mFrameMain;
27 | protected boolean numbered = false;
28 |
29 | @Override
30 | protected void onCreate(Bundle savedInstanceState) {
31 | super.onCreate(savedInstanceState);
32 | setContentView(getActivityMainLayoutId());
33 | mDemoSlider = (SliderLayout) findViewById(R.id.slider);
34 | mFrameMain = (RelativeLayout) findViewById(R.id.sliderframe);
35 | setupSlider();
36 | }
37 |
38 | @LayoutRes
39 | protected int getActivityMainLayoutId() {
40 | return R.layout.main_slider;
41 | }
42 |
43 | protected abstract void setupSlider();
44 |
45 | @Override
46 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
47 | }
48 |
49 | @Override
50 | public void onPageSelected(int position) {
51 | Log.d("Slider Demo", "Page Changed: " + position);
52 | }
53 |
54 | @Override
55 | public void onPageScrollStateChanged(int state) {
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/mod/NsZoomable.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.mod;
2 |
3 | import android.os.Bundle;
4 | import android.support.v7.app.AppCompatActivity;
5 | import android.widget.Toast;
6 |
7 | import com.hkm.loyalns.R;
8 | import com.hkm.slider.GalleryWidget.BasePagerAdapter;
9 | import com.hkm.slider.GalleryWidget.FilePagerAdapter;
10 | import com.hkm.slider.GalleryWidget.GalleryViewPager;
11 |
12 | /**
13 | * Created by hesk on 8/3/16.
14 | */
15 | public abstract class NsZoomable extends AppCompatActivity {
16 | private GalleryViewPager mViewPager;
17 |
18 |
19 | protected abstract void startViewPager(GalleryViewPager mViewpager);
20 |
21 | @Override
22 | protected void onCreate(Bundle savedInstanceState) {
23 | super.onCreate(savedInstanceState);
24 | setContentView(R.layout.pager_slide);
25 | mViewPager = (GalleryViewPager) findViewById(R.id.slider);
26 | startViewPager(mViewPager);
27 | }
28 |
29 | /**
30 | * Call this when your activity is done and should be closed. The
31 | * ActivityResult is propagated back to whoever launched you via
32 | * onActivityResult().
33 | */
34 | @Override
35 | public void finish() {
36 | super.finish();
37 | Runtime.getRuntime().gc();
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/modules/CustomNumberView.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.modules;
2 |
3 | import android.content.Context;
4 | import android.widget.ImageView;
5 | import android.widget.TextView;
6 |
7 | import com.hkm.loyalns.R;
8 | import com.hkm.slider.SliderTypes.AdvancedTextSliderView;
9 |
10 |
11 | /**
12 | * Created by hesk on 19/8/15.
13 | */
14 | public class CustomNumberView extends AdvancedTextSliderView {
15 |
16 | public CustomNumberView(Context context) {
17 | super(context);
18 | }
19 |
20 | @Override
21 | protected int renderedLayoutTextBanner() {
22 | return R.layout.item_slide_feature_banner;
23 | }
24 | }
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/modules/NumZero.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.modules;
2 |
3 | import android.content.Context;
4 | import android.widget.TextView;
5 |
6 | import com.hkm.loyalns.R;
7 | import com.hkm.slider.Indicators.NumContainer;
8 |
9 |
10 | /**
11 | * Created by hesk on 7/7/15.
12 | */
13 | public class NumZero extends NumContainer {
14 | public NumZero(Context c) {
15 | super(c, R.layout.numfield);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/testApp/src/main/java/com/hkm/loyalns/modules/TransformerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns.modules;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 | import android.widget.TextView;
9 |
10 | import com.hkm.loyalns.R;
11 | import com.hkm.slider.TransformerL;
12 |
13 |
14 | /**
15 | * Created by daimajia on 14-5-29.
16 | */
17 | public class TransformerAdapter extends BaseAdapter{
18 | private Context mContext;
19 | public TransformerAdapter(Context context) {
20 | mContext = context;
21 | }
22 |
23 | @Override
24 | public int getCount() {
25 | return TransformerL.values().length;
26 | }
27 |
28 | @Override
29 | public Object getItem(int position) {
30 | return TransformerL.values()[position].toString();
31 | }
32 |
33 | @Override
34 | public long getItemId(int position) {
35 | return position;
36 | }
37 |
38 | @Override
39 | public View getView(int position, View convertView, ViewGroup parent) {
40 | TextView t = (TextView)LayoutInflater.from(mContext).inflate(R.layout.item,null);
41 | t.setText(getItem(position).toString());
42 | return t;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/bigbang.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/bigbang.jpg
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/bird.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/bird.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/d1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/d1.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/game_of_thrones.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/game_of_thrones.jpg
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/hannibal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/hannibal.jpg
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/house.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/house.jpg
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-hdpi/ic_no_photo_classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-hdpi/ic_no_photo_classic.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-mdpi/ic_no_photo_classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-mdpi/ic_no_photo_classic.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-xhdpi/ic_no_photo_classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-xhdpi/ic_no_photo_classic.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable-xxhdpi/ic_no_photo_classic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/drawable-xxhdpi/ic_no_photo_classic.png
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable/ic_add_24dp.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable/myarrowl.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
8 |
9 |
10 |
11 |
12 |
18 |
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable/nspider.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/testApp/src/main/res/drawable/shadow_transit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/b_slider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
25 |
26 |
46 |
47 |
53 |
54 |
55 |
56 |
62 |
63 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/bouncer_slider.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
26 |
27 |
28 |
29 |
30 |
34 |
35 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/full_scn.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
12 |
13 |
24 |
25 |
45 |
46 |
52 |
53 |
54 |
55 |
61 |
62 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/item.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/item_adjustable_slide.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
15 |
16 |
17 |
18 |
23 |
24 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/item_slide_feature_banner.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
17 |
18 |
28 |
29 |
37 |
38 |
41 |
42 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/main_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/main_slider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
23 |
24 |
44 |
45 |
51 |
52 |
53 |
54 |
60 |
61 |
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/news_feed_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
15 |
16 |
17 |
22 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/numfield.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/pager_slide.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/test_adjustment_height.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
15 |
16 |
19 |
20 |
31 |
32 |
33 |
54 |
60 |
61 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/testApp/src/main/res/layout/vertical_slider.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
11 |
12 |
24 |
25 |
45 |
46 |
52 |
53 |
58 |
59 |
64 |
65 |
66 |
67 |
68 |
74 |
75 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/testApp/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
64 |
--------------------------------------------------------------------------------
/testApp/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testApp/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testApp/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testApp/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jjhesk/LoyalNativeSlider/79e06a17a25433cc1f789a342c59dc06c8c1e959/testApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/testApp/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 | >
2 |
3 |
9 |
10 |
--------------------------------------------------------------------------------
/testApp/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/testApp/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffec2133
4 | #ffe09280
5 | #ffec70b9
6 | #bb9c4177
7 | #cc757575
8 | #e8c6c6c6
9 |
10 |
11 | #00000000
12 | #7f000000
13 | #a45dafcf
14 |
15 |
16 |
--------------------------------------------------------------------------------
/testApp/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/testApp/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | NSlider
4 | Settings
5 | https://github.com/jjhesk/LoyalNativeSlider
6 | 【巴黎恐襲】恐襲威脅增加 美發全球旅遊警告
7 | https://s-media-cache-ak0.pinimg.com/236x/25/27/eb/2527eb4b1402d6bf61c6062ced6c4957.jpg
8 | UFO獵人新發現 見到火星有「大老鼠」
9 | https://s-media-cache-ak0.pinimg.com/564x/2d/56/49/2d564970fed619a0e4e8f09d59b5550f.jpg
10 | 年輕愛侶無家可歸機場為家住足七個月
11 | http://static.apple.nextmedia.com/images/e-paper/20151122/large/1448185804_7fc3.jpg
12 | 海鷗活吃鯨皮鯨脂 BB鯨背脊傷痕纍纍
13 | http://static.apple.nextmedia.com/images/e-paper/20151124/large/1448316768_6b57.jpg
14 | 金工の奥深さに感心、「わざ」学ぶ 千秋美術館などでツアー
15 | https://s-media-cache-ak0.pinimg.com/236x/67/36/af/6736af9b5f8fab8483d8ce9d0bc0881d.jpg
16 | 鍋物シーズン、きりたんぽ作り盛ん 秋田市中通の商店
17 | https://s-media-cache-ak0.pinimg.com/564x/58/c8/d6/58c8d6731f704c0893a49877edea9b42.jpg
18 | コンビニ店員刺され死亡、店長を殺人未遂容疑で逮捕
19 | http://articleimage.nicoblomaga.jp/image/64/2015/e/e/ee02084cc06712b11dcc6fb1a858572cfb2f0f1c1432366880.jpg
20 | 李克强结束马来西亚之行启程赴苏州
21 | http://img1.gtimg.com/news/pics/hv1/31/124/1972/128260951.jpg
22 | https://s-media-cache-ak0.pinimg.com/236x/e4/f7/7c/e4f77c40209f657fb8c7eb4d8a4cdebc.jpg
23 | https://s-media-cache-ak0.pinimg.com/564x/63/30/76/633076d2fe28df399935fbd3f3fe15e2.jpg
24 | https://s-media-cache-ak0.pinimg.com/564x/67/3b/f7/673bf7a7e99f18753917f325917769e0.jpg
25 | https://s-media-cache-ak0.pinimg.com/236x/0b/62/80/0b62803986df8040af144cfbc7ddbe95.jpg
26 | https://s-media-cache-ak0.pinimg.com/564x/a5/ef/3d/a5ef3d7b49c19a839f18cf62d9be6a40.jpg
27 |
28 |
29 | https://s-media-cache-ak0.pinimg.com/564x/c2/a7/8e/c2a78e766a87521cfbdc9750c7edb384.jpg
30 | https://s-media-cache-ak0.pinimg.com/564x/7e/64/d4/7e64d4da8503e952c9575c42b0ca37fa.jpg
31 | https://s-media-cache-ak0.pinimg.com/564x/f7/70/a2/f770a2b191008fcc9797f61a304ad276.jpg
32 | https://s-media-cache-ak0.pinimg.com/564x/d9/5f/a8/d95fa80ad0180c772cd3ea0e37d528b6.jpg
33 | https://s-media-cache-ak0.pinimg.com/564x/24/77/52/2477525e9ef64dce820c729f4c2a598e.jpg
34 | 纪念人类祖母“露西”发现日:谷歌放动态图
35 | 自制闹钟被当炸弹 穆斯林男孩向美当局索赔1500万美元
36 | "그거 아십니까" 폭소 터지게 한 YS의 DJ 공격 발언
37 | DJ때 황장엽 어려움 겪자 "우리 집에서 함께 살자" [출처] 본 기사는 조선닷컴에서 작성된 기사 입니다
38 | 공공조달용 PC시장은 연간 40만대에 달하며, 전체 국내 PC시장의 약 20%를 차지하는 거대 시장이다. 정부는 2012년 데스크톱PC를 중소기업간 경쟁제품으로 지정해 대기업의 원천참여를 막았으며, 이로인해 순차적으로 대기업의 참여비율을 줄여 2015년부터 데스크톱PC시장에 대기업은 원천적으로 조달시장 참여가 불가능하다. 현재까지의 상황이다.
39 |
40 |
41 |
--------------------------------------------------------------------------------
/testApp/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/testApp/src/test/java/com/hkm/loyalns/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.hkm.loyalns;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------