├── .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 | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 36 | 37 | 42 | 47 | 48 | 53 | 58 | 63 | 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 | } --------------------------------------------------------------------------------