├── .classpath
├── .gitignore
├── .project
├── AndroidManifest.xml
├── README.md
├── build.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── libs
└── android-support-v4.jar
├── proguard-project.txt
├── project.properties
├── res
├── anim
│ ├── fade_out.xml
│ ├── slide_in_right.xml
│ └── slide_out_left.xml
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-ldpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable
│ ├── chiang_mai.jpg
│ ├── himeji.jpg
│ ├── overscroll_left.xml
│ ├── overscroll_right.xml
│ ├── petronas_twin_tower.jpg
│ └── ulm.jpg
├── layout
│ └── activity_main.xml
├── values-large
│ └── dimens.xml
├── values-v11
│ └── styles.xml
├── values-v14
│ └── styles.xml
├── values-v21
│ └── styles.xml
└── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
└── src
└── com
└── sqisland
└── android
└── swipe_image_viewer
└── MainActivity.java
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # General
2 | .DS_Store
3 | *~
4 |
5 | # Android Studio
6 | .idea/
7 | .gradle
8 | local.properties
9 | /*/out
10 | build
11 | *.iml
12 | *.iws
13 | *.ipr
14 | *.swp
15 |
16 | # built application files
17 | *.apk
18 | *.ap_
19 |
20 | # files for the dex VM
21 | *.dex
22 |
23 | # Java class files
24 | *.class
25 |
26 | # generated files
27 | bin/
28 | gen/
29 |
30 | # Eclipse project files
31 | .classpath
32 | .project
33 |
34 | # Proguard folder generated by Eclipse
35 | proguard/
36 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | swipe-image-viewer
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Android Swipe Image Viewer
2 | --------------------------
3 |
4 | This image viewer shows one image at a time. Swiping moves the image back and forth.
5 |
6 | The initial implementation uses `ImageSwitcher` with `GestureDetector`:
7 | [ImageSwitcher tag] [1]
8 |
9 | Here is my [blog post] [2] explaining how it was made.
10 |
11 | It has been updated to use `ViewPager`, which slides the images as you swipe, giving better visual feedback.
12 |
13 | [1]: https://github.com/chiuki/android-swipe-image-viewer/tree/ImageSwitcher
14 | [2]: http://blog.sqisland.com/2012/07/android-swipe-image-viewer.html
15 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | jcenter()
4 | }
5 | dependencies {
6 | classpath 'com.android.tools.build:gradle:1.1.0'
7 | }
8 | }
9 |
10 | apply plugin: 'com.android.application'
11 |
12 | dependencies {
13 | compile 'com.android.support:support-v4:21.0.3'
14 | }
15 |
16 | android {
17 | compileSdkVersion 21
18 | buildToolsVersion "21.1.2"
19 |
20 | defaultConfig {
21 | minSdkVersion 4
22 | targetSdkVersion 21
23 | }
24 |
25 | sourceSets {
26 | main {
27 | manifest.srcFile 'AndroidManifest.xml'
28 | java.srcDirs = ['src']
29 | resources.srcDirs = ['src']
30 | aidl.srcDirs = ['src']
31 | renderscript.srcDirs = ['src']
32 | res.srcDirs = ['res']
33 | assets.srcDirs = ['assets']
34 | }
35 |
36 | androidTest.setRoot('tests')
37 | }
38 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Mar 5 21:21:24 MST 2015
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-2.2.1-all.zip
7 |
--------------------------------------------------------------------------------
/libs/android-support-v4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/libs/android-support-v4.jar
--------------------------------------------------------------------------------
/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-16
15 |
--------------------------------------------------------------------------------
/res/anim/fade_out.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/res/anim/slide_in_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/res/anim/slide_out_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-ldpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable-ldpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable/chiang_mai.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable/chiang_mai.jpg
--------------------------------------------------------------------------------
/res/drawable/himeji.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable/himeji.jpg
--------------------------------------------------------------------------------
/res/drawable/overscroll_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/res/drawable/overscroll_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
--------------------------------------------------------------------------------
/res/drawable/petronas_twin_tower.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable/petronas_twin_tower.jpg
--------------------------------------------------------------------------------
/res/drawable/ulm.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chiuki/android-swipe-image-viewer/4e85294e601fd193f43672025b03cfe9c8c802ee/res/drawable/ulm.jpg
--------------------------------------------------------------------------------
/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/res/values-large/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 8dp
3 | 16dp
4 | 16dp
5 |
--------------------------------------------------------------------------------
/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
--------------------------------------------------------------------------------
/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
--------------------------------------------------------------------------------
/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 | #33b5e5
3 | #c1e25e
4 | #a3c639
5 | #85a71d
6 |
--------------------------------------------------------------------------------
/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 | 4dp
3 | 8dp
4 | 16dp
5 |
--------------------------------------------------------------------------------
/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Swipe Image Viewer
3 |
--------------------------------------------------------------------------------
/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
--------------------------------------------------------------------------------
/src/com/sqisland/android/swipe_image_viewer/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.sqisland.android.swipe_image_viewer;
2 |
3 | import android.app.Activity;
4 | import android.content.Context;
5 | import android.os.Bundle;
6 | import android.support.v4.view.PagerAdapter;
7 | import android.support.v4.view.ViewPager;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 | import android.widget.ImageView;
11 |
12 | public class MainActivity extends Activity {
13 | @Override
14 | public void onCreate(Bundle savedInstanceState) {
15 | super.onCreate(savedInstanceState);
16 | setContentView(R.layout.activity_main);
17 |
18 | ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
19 | ImagePagerAdapter adapter = new ImagePagerAdapter();
20 | viewPager.setAdapter(adapter);
21 | }
22 |
23 | private class ImagePagerAdapter extends PagerAdapter {
24 | private int[] mImages = new int[] {
25 | R.drawable.chiang_mai,
26 | R.drawable.himeji,
27 | R.drawable.petronas_twin_tower,
28 | R.drawable.ulm
29 | };
30 |
31 | @Override
32 | public int getCount() {
33 | return mImages.length;
34 | }
35 |
36 | @Override
37 | public boolean isViewFromObject(View view, Object object) {
38 | return view == ((ImageView) object);
39 | }
40 |
41 | @Override
42 | public Object instantiateItem(ViewGroup container, int position) {
43 | Context context = MainActivity.this;
44 | ImageView imageView = new ImageView(context);
45 | int padding = context.getResources().getDimensionPixelSize(
46 | R.dimen.padding_medium);
47 | imageView.setPadding(padding, padding, padding, padding);
48 | imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
49 | imageView.setImageResource(mImages[position]);
50 | ((ViewPager) container).addView(imageView, 0);
51 | return imageView;
52 | }
53 |
54 | @Override
55 | public void destroyItem(ViewGroup container, int position, Object object) {
56 | ((ViewPager) container).removeView((ImageView) object);
57 | }
58 | }
59 | }
--------------------------------------------------------------------------------