From 44e2492e426de3a33730b13dfbaa7bb580dabd39 Mon Sep 17 00:00:00 2001 From: David Morrissey Date: Mon, 20 Nov 2017 10:36:41 +0000 Subject: Moved sample to different package name to avoid conflict with Play store version --- sample/build.gradle | 3 + sample/src/main/AndroidManifest.xml | 4 +- .../sample/AbstractFragmentsActivity.java | 98 ------------- .../subscaleview/sample/AbstractPagesActivity.java | 115 --------------- .../labs/subscaleview/sample/MainActivity.java | 95 ------------- .../labs/subscaleview/sample/Page.java | 37 ----- .../sample/animation/AnimationActivity.java | 87 ------------ .../basicfeatures/BasicFeaturesActivity.java | 52 ------- .../configuration/ConfigurationActivity.java | 110 --------------- .../eventhandling/EventHandlingActivity.java | 57 -------- .../AdvancedEventHandlingActivity.java | 94 ------------ .../sample/extension/ExtensionActivity.java | 67 --------- .../sample/extension/ExtensionCircleFragment.java | 46 ------ .../extension/ExtensionFreehandFragment.java | 46 ------ .../sample/extension/ExtensionPinFragment.java | 45 ------ .../sample/extension/views/CircleView.java | 72 ---------- .../sample/extension/views/FreehandView.java | 157 --------------------- .../sample/extension/views/PinView.java | 76 ---------- .../sample/imagedisplay/ImageDisplayActivity.java | 60 -------- .../imagedisplay/ImageDisplayLargeFragment.java | 43 ------ .../imagedisplay/ImageDisplayRegionFragment.java | 48 ------- .../imagedisplay/ImageDisplayRotateFragment.java | 50 ------- .../sample/viewpager/VerticalViewPager.java | 67 --------- .../sample/viewpager/ViewPagerActivity.java | 98 ------------- .../sample/viewpager/ViewPagerFragment.java | 69 --------- .../test/AbstractFragmentsActivity.java | 98 +++++++++++++ .../subscaleview/test/AbstractPagesActivity.java | 115 +++++++++++++++ .../labs/subscaleview/test/MainActivity.java | 95 +++++++++++++ .../davemorrissey/labs/subscaleview/test/Page.java | 37 +++++ .../test/animation/AnimationActivity.java | 87 ++++++++++++ .../test/basicfeatures/BasicFeaturesActivity.java | 52 +++++++ .../test/configuration/ConfigurationActivity.java | 110 +++++++++++++++ .../test/eventhandling/EventHandlingActivity.java | 57 ++++++++ .../AdvancedEventHandlingActivity.java | 94 ++++++++++++ .../test/extension/ExtensionActivity.java | 67 +++++++++ .../test/extension/ExtensionCircleFragment.java | 46 ++++++ .../test/extension/ExtensionFreehandFragment.java | 46 ++++++ .../test/extension/ExtensionPinFragment.java | 45 ++++++ .../test/extension/views/CircleView.java | 72 ++++++++++ .../test/extension/views/FreehandView.java | 157 +++++++++++++++++++++ .../subscaleview/test/extension/views/PinView.java | 76 ++++++++++ .../test/imagedisplay/ImageDisplayActivity.java | 60 ++++++++ .../imagedisplay/ImageDisplayLargeFragment.java | 43 ++++++ .../imagedisplay/ImageDisplayRegionFragment.java | 48 +++++++ .../imagedisplay/ImageDisplayRotateFragment.java | 50 +++++++ .../test/viewpager/VerticalViewPager.java | 67 +++++++++ .../test/viewpager/ViewPagerActivity.java | 98 +++++++++++++ .../test/viewpager/ViewPagerFragment.java | 69 +++++++++ sample/src/main/res/layout/animation_activity.xml | 2 +- .../main/res/layout/extension_circle_fragment.xml | 2 +- .../res/layout/extension_freehand_fragment.xml | 2 +- .../src/main/res/layout/extension_pin_fragment.xml | 2 +- sample/src/main/res/layout/view_pager.xml | 2 +- sample/src/main/res/values/strings.xml | 2 +- 54 files changed, 1700 insertions(+), 1697 deletions(-) delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractFragmentsActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractPagesActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/MainActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/Page.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/animation/AnimationActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/basicfeatures/BasicFeaturesActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/configuration/ConfigurationActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandling/EventHandlingActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandlingadvanced/AdvancedEventHandlingActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionCircleFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionFreehandFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionPinFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/CircleView.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/FreehandView.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/PinView.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayLargeFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRegionFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRotateFragment.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/VerticalViewPager.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerActivity.java delete mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractFragmentsActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractPagesActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/MainActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/Page.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/CircleView.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/FreehandView.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/PinView.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java create mode 100644 sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerFragment.java diff --git a/sample/build.gradle b/sample/build.gradle index eaa8019..f2a0954 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -2,6 +2,9 @@ apply plugin: 'com.android.application' android { compileSdkVersion 26 + defaultConfig { + applicationId "com.davemorrissey.labs.subscaleview.test" + } sourceSets { main { diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index df2c0f5..3bcdd74 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -1,7 +1,7 @@ @@ -10,7 +10,7 @@ - + diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractFragmentsActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractFragmentsActivity.java deleted file mode 100644 index 1bbe522..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractFragmentsActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* -Copyright 2017 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample; - -import android.app.ActionBar; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; -import android.view.MenuItem; - -import java.util.List; - -public abstract class AbstractFragmentsActivity extends FragmentActivity { - - private static final String BUNDLE_PAGE = "page"; - - private int page; - - private final int title; - private final int layout; - private final List notes; - - protected abstract void onPageChanged(int page); - - protected AbstractFragmentsActivity(int title, int layout, List notes) { - this.title = title; - this.layout = layout; - this.notes = notes; - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(layout); - ActionBar actionBar = getActionBar(); - if (actionBar != null) { - actionBar.setTitle(getString(title)); - actionBar.setDisplayHomeAsUpEnabled(true); - } - if (savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_PAGE)) { - page = savedInstanceState.getInt(BUNDLE_PAGE); - } - } - - @Override - protected void onResume() { - super.onResume(); - updateNotes(); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(BUNDLE_PAGE, page); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - finish(); - return true; - } - - public void next() { - page++; - updateNotes(); - } - - public void previous() { - page--; - updateNotes(); - } - - private void updateNotes() { - if (page > notes.size() - 1) { - return; - } - ActionBar actionBar = getActionBar(); - if (actionBar != null) { - actionBar.setSubtitle(notes.get(page).getSubtitle()); - } - onPageChanged(page); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractPagesActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractPagesActivity.java deleted file mode 100644 index de0711f..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/AbstractPagesActivity.java +++ /dev/null @@ -1,115 +0,0 @@ -/* -Copyright 2017 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample; - -import android.app.ActionBar; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.support.v4.app.FragmentActivity; -import android.view.MenuItem; -import android.view.View; -import android.widget.TextView; - -import java.util.List; - -public abstract class AbstractPagesActivity extends FragmentActivity { - - private static final String BUNDLE_PAGE = "page"; - - private int page; - - private final int title; - private final int layout; - private final List notes; - - protected AbstractPagesActivity(int title, int layout, List notes) { - this.title = title; - this.layout = layout; - this.notes = notes; - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(layout); - ActionBar actionBar = getActionBar(); - if (actionBar != null) { - actionBar.setTitle(getString(title)); - actionBar.setDisplayHomeAsUpEnabled(true); - } - findViewById(R.id.next).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { next(); } - }); - findViewById(R.id.previous).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { previous(); } - }); - if (savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_PAGE)) { - page = savedInstanceState.getInt(BUNDLE_PAGE); - } - } - - @Override - protected void onResume() { - super.onResume(); - updateNotes(); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putInt(BUNDLE_PAGE, page); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - finish(); - return true; - } - - private void next() { - page++; - updateNotes(); - } - - private void previous() { - page--; - updateNotes(); - } - - private void updateNotes() { - if (page > notes.size() - 1) { - return; - } - ActionBar actionBar = getActionBar(); - if (actionBar != null) { - actionBar.setSubtitle(notes.get(page).getSubtitle()); - } - ((TextView)findViewById(R.id.note)).setText(notes.get(page).getText()); - findViewById(R.id.next).setVisibility(page >= notes.size() - 1 ? View.INVISIBLE : View.VISIBLE); - findViewById(R.id.previous).setVisibility(page <= 0 ? View.INVISIBLE : View.VISIBLE); - onPageChanged(page); - } - - protected final int getPage() { - return page; - } - - protected void onPageChanged(int page) { - - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/MainActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/MainActivity.java deleted file mode 100644 index f49bf8f..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/MainActivity.java +++ /dev/null @@ -1,95 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample; - -import android.app.ActionBar; -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.view.View; - -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.animation.AnimationActivity; -import com.davemorrissey.labs.subscaleview.sample.basicfeatures.BasicFeaturesActivity; -import com.davemorrissey.labs.subscaleview.sample.configuration.ConfigurationActivity; -import com.davemorrissey.labs.subscaleview.sample.eventhandling.EventHandlingActivity; -import com.davemorrissey.labs.subscaleview.sample.eventhandlingadvanced.AdvancedEventHandlingActivity; -import com.davemorrissey.labs.subscaleview.sample.extension.ExtensionActivity; -import com.davemorrissey.labs.subscaleview.sample.imagedisplay.ImageDisplayActivity; -import com.davemorrissey.labs.subscaleview.sample.viewpager.ViewPagerActivity; - -public class MainActivity extends Activity implements View.OnClickListener { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ActionBar actionBar = getActionBar(); - if (actionBar != null) { - actionBar.setTitle(R.string.main_title); - } - setContentView(R.layout.main); - findViewById(id.basicFeatures).setOnClickListener(this); - findViewById(id.imageDisplay).setOnClickListener(this); - findViewById(id.eventHandling).setOnClickListener(this); - findViewById(id.advancedEventHandling).setOnClickListener(this); - findViewById(id.viewPagerGalleries).setOnClickListener(this); - findViewById(id.animation).setOnClickListener(this); - findViewById(id.extension).setOnClickListener(this); - findViewById(id.configuration).setOnClickListener(this); - findViewById(id.github).setOnClickListener(this); - findViewById(id.self).setOnClickListener(this); - } - - @Override - public void onClick(View view) { - switch (view.getId()) { - case id.basicFeatures: startActivity(BasicFeaturesActivity.class); break; - case id.imageDisplay: startActivity(ImageDisplayActivity.class); break; - case id.eventHandling: startActivity(EventHandlingActivity.class); break; - case id.advancedEventHandling: startActivity(AdvancedEventHandlingActivity.class); break; - case id.viewPagerGalleries: startActivity(ViewPagerActivity.class); break; - case id.animation: startActivity(AnimationActivity.class); break; - case id.extension: startActivity(ExtensionActivity.class); break; - case id.configuration: startActivity(ConfigurationActivity.class); break; - case id.github: openGitHub(); break; - case id.self: openSelf(); break; - } - } - - private void startActivity(Class activity) { - Intent intent = new Intent(this, activity); - startActivity(intent); - } - - private void openGitHub() { - Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse("https://github.com/davemorrissey/subsampling-scale-image-view")); - startActivity(i); - } - - private void openSelf() { - Intent i = new Intent(Intent.ACTION_VIEW); - i.setData(Uri.parse("http://www.davemorrissey.com")); - startActivity(i); - } - - @Override - public void onBackPressed() { - moveTaskToBack(true); - } -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/Page.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/Page.java deleted file mode 100644 index f489f6e..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/Page.java +++ /dev/null @@ -1,37 +0,0 @@ -/* -Copyright 2017 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample; - -public class Page { - - private final int text; - - private final int subtitle; - - public Page(int subtitle, int text) { - this.subtitle = subtitle; - this.text = text; - } - - public int getText() { - return text; - } - - public int getSubtitle() { - return subtitle; - } -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/animation/AnimationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/animation/AnimationActivity.java deleted file mode 100644 index 008691d..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/animation/AnimationActivity.java +++ /dev/null @@ -1,87 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.animation; - -import android.graphics.PointF; -import android.os.Bundle; -import android.support.annotation.Nullable; -import android.view.View; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.AnimationBuilder; -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.extension.views.PinView; - -import java.util.Arrays; -import java.util.Random; - -import static com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.*; -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; - -public class AnimationActivity extends AbstractPagesActivity { - - private PinView view; - - public AnimationActivity() { - super(animation_title, animation_activity, Arrays.asList( - new Page(animation_p1_subtitle, animation_p1_text), - new Page(animation_p2_subtitle, animation_p2_text), - new Page(animation_p3_subtitle, animation_p3_text), - new Page(animation_p4_subtitle, animation_p4_text) - )); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - findViewById(id.play).setOnClickListener(new OnClickListener() { - @Override public void onClick(View v) { AnimationActivity.this.play(); } - }); - view = findViewById(id.imageView); - view.setImage(ImageSource.asset("squirrel.jpg")); - } - - @Override - protected void onPageChanged(int page) { - if (page == 2) { - view.setPanLimit(PAN_LIMIT_CENTER); - } else { - view.setPanLimit(PAN_LIMIT_INSIDE); - } - } - - private void play() { - Random random = new Random(); - if (view.isReady()) { - float maxScale = view.getMaxScale(); - float minScale = view.getMinScale(); - float scale = (random.nextFloat() * (maxScale - minScale)) + minScale; - PointF center = new PointF(random.nextInt(view.getSWidth()), random.nextInt(view.getSHeight())); - view.setPin(center); - AnimationBuilder animationBuilder = view.animateScaleAndCenter(scale, center); - if (getPage() == 3) { - animationBuilder.withDuration(2000).withEasing(EASE_OUT_QUAD).withInterruptible(false).start(); - } else { - animationBuilder.withDuration(750).start(); - } - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/basicfeatures/BasicFeaturesActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/basicfeatures/BasicFeaturesActivity.java deleted file mode 100644 index a89619a..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/basicfeatures/BasicFeaturesActivity.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.basicfeatures; - -import android.os.Bundle; -import android.support.annotation.Nullable; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; - -import java.util.Arrays; - -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; - -public class BasicFeaturesActivity extends AbstractPagesActivity { - - public BasicFeaturesActivity() { - super(basic_title, pages_activity, Arrays.asList( - new Page(basic_p1_subtitle, basic_p1_text), - new Page(basic_p2_subtitle, basic_p2_text), - new Page(basic_p3_subtitle, basic_p3_text), - new Page(basic_p4_subtitle, basic_p4_text), - new Page(basic_p5_subtitle, basic_p5_text) - )); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - SubsamplingScaleImageView view = findViewById(id.imageView); - view.setImage(ImageSource.asset("pony.jpg")); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/configuration/ConfigurationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/configuration/ConfigurationActivity.java deleted file mode 100644 index 39c4b24..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/configuration/ConfigurationActivity.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.configuration; - -import android.graphics.PointF; -import android.os.Bundle; -import android.support.annotation.Nullable; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; - -import java.util.Arrays; - -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; - -public class ConfigurationActivity extends AbstractPagesActivity { - - private SubsamplingScaleImageView view; - - public ConfigurationActivity() { - super(configuration_title, pages_activity, Arrays.asList( - new Page(configuration_p1_subtitle, configuration_p1_text), - new Page(configuration_p2_subtitle, configuration_p2_text), - new Page(configuration_p3_subtitle, configuration_p3_text), - new Page(configuration_p4_subtitle, configuration_p4_text), - new Page(configuration_p5_subtitle, configuration_p5_text), - new Page(configuration_p6_subtitle, configuration_p6_text), - new Page(configuration_p7_subtitle, configuration_p7_text), - new Page(configuration_p8_subtitle, configuration_p8_text), - new Page(configuration_p9_subtitle, configuration_p9_text), - new Page(configuration_p10_subtitle, configuration_p10_text) - )); - } - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - view = findViewById(id.imageView); - view.setImage(ImageSource.asset("eagle.jpg")); - } - - @Override - protected void onPageChanged(int page) { - if (page == 0) { - view.setMinimumDpi(50); - } else { - view.setMaxScale(2F); - } - if (page == 1) { - view.setMinimumTileDpi(50); - } else { - view.setMinimumTileDpi(500); - } - if (page == 4) { - view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER); - } else if (page == 5) { - view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER_IMMEDIATE); - } else { - view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED); - } - if (page == 6) { - view.setDoubleTapZoomDpi(240); - } else { - view.setDoubleTapZoomScale(1F); - } - if (page == 7) { - view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_CENTER); - } else if (page == 8) { - view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_OUTSIDE); - } else { - view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE); - } - if (page == 9) { - view.setDebug(true); - } else { - view.setDebug(false); - } - if (page == 2) { - view.setScaleAndCenter(0f, new PointF(2456, 1632)); - view.setPanEnabled(false); - } else { - view.setPanEnabled(true); - } - if (page == 3) { - view.setScaleAndCenter(1f, new PointF(2456, 1632)); - view.setZoomEnabled(false); - } else { - view.setZoomEnabled(true); - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandling/EventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandling/EventHandlingActivity.java deleted file mode 100644 index bd5613a..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandling/EventHandlingActivity.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.eventhandling; - -import android.os.Bundle; -import android.view.View; -import android.widget.Toast; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; - -import java.util.Arrays; - -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; - -public class EventHandlingActivity extends AbstractPagesActivity { - - public EventHandlingActivity() { - super(event_title, pages_activity, Arrays.asList( - new Page(event_p1_subtitle, event_p1_text), - new Page(event_p2_subtitle, event_p2_text), - new Page(event_p3_subtitle, event_p3_text) - )); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - SubsamplingScaleImageView imageView = findViewById(id.imageView); - imageView.setImage(ImageSource.asset("pony.jpg")); - imageView.setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_SHORT).show(); } - }); - imageView.setOnLongClickListener(new View.OnLongClickListener() { - @Override public boolean onLongClick(View v) { Toast.makeText(v.getContext(), "Long clicked", Toast.LENGTH_SHORT).show(); return true; } - }); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandlingadvanced/AdvancedEventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandlingadvanced/AdvancedEventHandlingActivity.java deleted file mode 100644 index e2c34fd..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/eventhandlingadvanced/AdvancedEventHandlingActivity.java +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.eventhandlingadvanced; - -import android.graphics.PointF; -import android.os.Bundle; -import android.view.GestureDetector; -import android.view.MotionEvent; -import android.view.View; -import android.widget.Toast; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; - -import java.util.Arrays; - -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; - -public class AdvancedEventHandlingActivity extends AbstractPagesActivity { - - public AdvancedEventHandlingActivity() { - super(advancedevent_title, pages_activity, Arrays.asList( - new Page(advancedevent_p1_subtitle, advancedevent_p1_text), - new Page(advancedevent_p2_subtitle, advancedevent_p2_text), - new Page(advancedevent_p3_subtitle, advancedevent_p3_text), - new Page(advancedevent_p4_subtitle, advancedevent_p4_text), - new Page(advancedevent_p5_subtitle, advancedevent_p5_text) - )); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - final SubsamplingScaleImageView imageView = findViewById(id.imageView); - final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onSingleTapConfirmed(MotionEvent e) { - if (imageView.isReady()) { - PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); - Toast.makeText(getApplicationContext(), "Single tap: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getApplicationContext(), "Single tap: Image not ready", Toast.LENGTH_SHORT).show(); - } - return true; - } - @Override - public void onLongPress(MotionEvent e) { - if (imageView.isReady()) { - PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); - Toast.makeText(getApplicationContext(), "Long press: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getApplicationContext(), "Long press: Image not ready", Toast.LENGTH_SHORT).show(); - } - } - @Override - public boolean onDoubleTap(MotionEvent e) { - if (imageView.isReady()) { - PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); - Toast.makeText(getApplicationContext(), "Double tap: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getApplicationContext(), "Double tap: Image not ready", Toast.LENGTH_SHORT).show(); - } - return true; - } - }); - - imageView.setImage(ImageSource.asset("squirrel.jpg")); - imageView.setOnTouchListener(new View.OnTouchListener() { - @Override - public boolean onTouch(View view, MotionEvent motionEvent) { - return gestureDetector.onTouchEvent(motionEvent); - } - }); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionActivity.java deleted file mode 100644 index 1b143d7..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionActivity.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension; - -import android.support.v4.app.Fragment; -import android.util.Log; - -import com.davemorrissey.labs.subscaleview.sample.AbstractFragmentsActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.imagedisplay.ImageDisplayActivity; - -import java.util.Arrays; -import java.util.List; - -import static com.davemorrissey.labs.subscaleview.sample.R.layout.fragments_activity; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p1_subtitle; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p1_text; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p2_subtitle; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p2_text; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p3_subtitle; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_p3_text; -import static com.davemorrissey.labs.subscaleview.sample.R.string.extension_title; - -public class ExtensionActivity extends AbstractFragmentsActivity { - - private static final List> FRAGMENTS = Arrays.asList( - ExtensionPinFragment.class, - ExtensionCircleFragment.class, - ExtensionFreehandFragment.class - ); - - public ExtensionActivity() { - super(extension_title, fragments_activity, Arrays.asList( - new Page(extension_p1_subtitle, extension_p1_text), - new Page(extension_p2_subtitle, extension_p2_text), - new Page(extension_p3_subtitle, extension_p3_text) - )); - } - - @Override - protected void onPageChanged(int page) { - try { - getSupportFragmentManager() - .beginTransaction() - .replace(id.frame, FRAGMENTS.get(page).newInstance()) - .commit(); - } catch (Exception e) { - Log.e(ImageDisplayActivity.class.getName(), "Failed to load fragment", e); - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionCircleFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionCircleFragment.java deleted file mode 100644 index 3cb3866..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionCircleFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; - -public class ExtensionCircleFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.extension_circle_fragment, container, false); - rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).next(); } - }); - rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).previous(); } - }); - SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset("squirrel.jpg")); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionFreehandFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionFreehandFragment.java deleted file mode 100644 index e77f882..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionFreehandFragment.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; -import com.davemorrissey.labs.subscaleview.sample.extension.views.FreehandView; - -public class ExtensionFreehandFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.extension_freehand_fragment, container, false); - rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ExtensionActivity) ExtensionFreehandFragment.this.getActivity()).previous(); } - }); - final FreehandView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset("squirrel.jpg")); - rootView.findViewById(id.reset).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { imageView.reset(); } - }); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionPinFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionPinFragment.java deleted file mode 100644 index d8e4e71..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/ExtensionPinFragment.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension; - -import android.graphics.PointF; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; -import com.davemorrissey.labs.subscaleview.sample.extension.views.PinView; - -public class ExtensionPinFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.extension_pin_fragment, container, false); - rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ExtensionActivity) ExtensionPinFragment.this.getActivity()).next(); } - }); - PinView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset("squirrel.jpg")); - imageView.setPin(new PointF(1718f, 581f)); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/CircleView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/CircleView.java deleted file mode 100644 index 9a7a6aa..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/CircleView.java +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension.views; - -import android.content.Context; -import android.graphics.*; -import android.graphics.Paint.Cap; -import android.graphics.Paint.Style; -import android.util.AttributeSet; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; - -public class CircleView extends SubsamplingScaleImageView { - - private int strokeWidth; - - private final PointF sCenter = new PointF(); - private final PointF vCenter = new PointF(); - private final Paint paint = new Paint(); - - public CircleView(Context context) { - this(context, null); - } - - public CircleView(Context context, AttributeSet attr) { - super(context, attr); - initialise(); - } - - private void initialise() { - float density = getResources().getDisplayMetrics().densityDpi; - strokeWidth = (int)(density/60f); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // Don't draw pin before image is ready so it doesn't move around during setup. - if (!isReady()) { - return; - } - - sCenter.set(getSWidth()/2, getSHeight()/2); - sourceToViewCoord(sCenter, vCenter); - float radius = (getScale() * getSWidth()) * 0.25f; - - paint.setAntiAlias(true); - paint.setStyle(Style.STROKE); - paint.setStrokeCap(Cap.ROUND); - paint.setStrokeWidth(strokeWidth * 2); - paint.setColor(Color.BLACK); - canvas.drawCircle(vCenter.x, vCenter.y, radius, paint); - paint.setStrokeWidth(strokeWidth); - paint.setColor(Color.argb(255, 51, 181, 229)); - canvas.drawCircle(vCenter.x, vCenter.y, radius, paint); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/FreehandView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/FreehandView.java deleted file mode 100644 index 6d49aca..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/FreehandView.java +++ /dev/null @@ -1,157 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension.views; - -import android.content.Context; -import android.graphics.*; -import android.graphics.Paint.Cap; -import android.graphics.Paint.Style; -import android.support.annotation.NonNull; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; -import android.view.View.OnTouchListener; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; - -import java.util.ArrayList; -import java.util.List; - -public class FreehandView extends SubsamplingScaleImageView implements OnTouchListener { - - private final Paint paint = new Paint(); - private final Path vPath = new Path(); - private final PointF vPoint = new PointF(); - private PointF vPrev = new PointF(); - private PointF vPrevious; - private PointF vStart; - private boolean drawing = false; - - private int strokeWidth; - - private List sPoints; - - public FreehandView(Context context, AttributeSet attr) { - super(context, attr); - initialise(); - } - - public FreehandView(Context context) { - this(context, null); - } - - private void initialise() { - setOnTouchListener(this); - float density = getResources().getDisplayMetrics().densityDpi; - strokeWidth = (int)(density/60f); - } - - @Override - public boolean onTouch(View view, MotionEvent motionEvent) { - return false; - } - - @Override - public boolean onTouchEvent(@NonNull MotionEvent event) { - if (sPoints != null && !drawing) { - return super.onTouchEvent(event); - } - boolean consumed = false; - int touchCount = event.getPointerCount(); - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - if (event.getActionIndex() == 0) { - vStart = new PointF(event.getX(), event.getY()); - vPrevious = new PointF(event.getX(), event.getY()); - } else { - vStart = null; - vPrevious = null; - } - break; - case MotionEvent.ACTION_MOVE: - PointF sCurrentF = viewToSourceCoord(event.getX(), event.getY()); - PointF sCurrent = new PointF(sCurrentF.x, sCurrentF.y); - PointF sStart = vStart == null ? null : new PointF(viewToSourceCoord(vStart).x, viewToSourceCoord(vStart).y); - - if (touchCount == 1 && vStart != null) { - float vDX = Math.abs(event.getX() - vPrevious.x); - float vDY = Math.abs(event.getY() - vPrevious.y); - if (vDX >= strokeWidth * 5 || vDY >= strokeWidth * 5) { - if (sPoints == null) { - sPoints = new ArrayList<>(); - sPoints.add(sStart); - } - sPoints.add(sCurrent); - vPrevious.x = event.getX(); - vPrevious.y = event.getY(); - drawing = true; - } - consumed = true; - invalidate(); - } else if (touchCount == 1) { - // Consume all one touch drags to prevent odd panning effects handled by the superclass. - consumed = true; - } - break; - case MotionEvent.ACTION_UP: - case MotionEvent.ACTION_POINTER_UP: - invalidate(); - drawing = false; - vPrevious = null; - vStart = null; - } - // Use parent to handle pinch and two-finger pan. - return consumed || super.onTouchEvent(event); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // Don't draw anything before image is ready. - if (!isReady()) { - return; - } - - paint.setAntiAlias(true); - - if (sPoints != null && sPoints.size() >= 2) { - vPath.reset(); - sourceToViewCoord(sPoints.get(0).x, sPoints.get(0).y, vPrev); - vPath.moveTo(vPrev.x, vPrev.y); - for (int i = 1; i < sPoints.size(); i++) { - sourceToViewCoord(sPoints.get(i).x, sPoints.get(i).y, vPoint); - vPath.quadTo(vPrev.x, vPrev.y, (vPoint.x + vPrev.x) / 2, (vPoint.y + vPrev.y) / 2); - vPrev = vPoint; - } - paint.setStyle(Style.STROKE); - paint.setStrokeCap(Cap.ROUND); - paint.setStrokeWidth(strokeWidth * 2); - paint.setColor(Color.BLACK); - canvas.drawPath(vPath, paint); - paint.setStrokeWidth(strokeWidth); - paint.setColor(Color.argb(255, 51, 181, 229)); - canvas.drawPath(vPath, paint); - } - - } - - public void reset() { - this.sPoints = null; - invalidate(); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/PinView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/PinView.java deleted file mode 100644 index fda8f73..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/extension/views/PinView.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.extension.views; - -import android.content.Context; -import android.graphics.*; -import android.util.AttributeSet; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.drawable; - - -public class PinView extends SubsamplingScaleImageView { - - private final Paint paint = new Paint(); - private final PointF vPin = new PointF(); - private PointF sPin; - private Bitmap pin; - - public PinView(Context context) { - this(context, null); - } - - public PinView(Context context, AttributeSet attr) { - super(context, attr); - initialise(); - } - - public void setPin(PointF sPin) { - this.sPin = sPin; - initialise(); - invalidate(); - } - - private void initialise() { - float density = getResources().getDisplayMetrics().densityDpi; - pin = BitmapFactory.decodeResource(this.getResources(), drawable.pushpin_blue); - float w = (density/420f) * pin.getWidth(); - float h = (density/420f) * pin.getHeight(); - pin = Bitmap.createScaledBitmap(pin, (int)w, (int)h, true); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - // Don't draw pin before image is ready so it doesn't move around during setup. - if (!isReady()) { - return; - } - - paint.setAntiAlias(true); - - if (sPin != null && pin != null) { - sourceToViewCoord(sPin, vPin); - float vX = vPin.x - (pin.getWidth()/2); - float vY = vPin.y - pin.getHeight(); - canvas.drawBitmap(pin, vX, vY, paint); - } - - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayActivity.java deleted file mode 100644 index 7d0df3b..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayActivity.java +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.imagedisplay; - -import android.support.v4.app.Fragment; -import android.util.Log; - -import com.davemorrissey.labs.subscaleview.sample.AbstractFragmentsActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R.id; - -import java.util.Arrays; -import java.util.List; - -import static com.davemorrissey.labs.subscaleview.sample.R.string.*; -import static com.davemorrissey.labs.subscaleview.sample.R.layout.*; - -public class ImageDisplayActivity extends AbstractFragmentsActivity { - - private static final List> FRAGMENTS = Arrays.asList( - ImageDisplayLargeFragment.class, - ImageDisplayRotateFragment.class, - ImageDisplayRegionFragment.class - ); - - public ImageDisplayActivity() { - super(display_title, fragments_activity, Arrays.asList( - new Page(display_p1_subtitle, display_p1_text), - new Page(display_p2_subtitle, display_p2_text), - new Page(display_p3_subtitle, display_p3_text) - )); - } - - @Override - protected void onPageChanged(int page) { - try { - getSupportFragmentManager() - .beginTransaction() - .replace(id.frame, FRAGMENTS.get(page).newInstance()) - .commit(); - } catch (Exception e) { - Log.e(ImageDisplayActivity.class.getName(), "Failed to load fragment", e); - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayLargeFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayLargeFragment.java deleted file mode 100644 index 7e8542f..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayLargeFragment.java +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.imagedisplay; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; - -public class ImageDisplayLargeFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.imagedisplay_large_fragment, container, false); - rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayLargeFragment.this.getActivity()).next(); } - }); - SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset("card.png")); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRegionFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRegionFragment.java deleted file mode 100644 index 517948f..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRegionFragment.java +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.imagedisplay; - -import android.graphics.Rect; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; - -public class ImageDisplayRegionFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.imagedisplay_region_fragment, container, false); - final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); - imageView.setOrientation(SubsamplingScaleImageView.ORIENTATION_90); - imageView.setImage(ImageSource.asset("card.png").region(new Rect(0, 0, 3778, 2834))); - rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRegionFragment.this.getActivity()).previous(); } - }); - rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); } - }); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRotateFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRotateFragment.java deleted file mode 100644 index 1ec199a..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/imagedisplay/ImageDisplayRotateFragment.java +++ /dev/null @@ -1,50 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.imagedisplay; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; - -public class ImageDisplayRotateFragment extends Fragment { - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.imagedisplay_rotate_fragment, container, false); - final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset("eagle.jpg")); - imageView.setOrientation(90); - rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).previous(); } - }); - rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).next(); } - }); - rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() { - @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); } - }); - return rootView; - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/VerticalViewPager.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/VerticalViewPager.java deleted file mode 100644 index 86d2e85..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/VerticalViewPager.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.davemorrissey.labs.subscaleview.sample.viewpager; - -import android.content.Context; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; - -/** - * From http://stackoverflow.com/a/22797619/2719186 - */ -public class VerticalViewPager extends ViewPager { - - public VerticalViewPager(Context context) { - super(context); - init(); - } - - public VerticalViewPager(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - private void init() { - setPageTransformer(true, new VerticalPageTransformer()); - setOverScrollMode(OVER_SCROLL_NEVER); - } - - private class VerticalPageTransformer implements ViewPager.PageTransformer { - - @Override - public void transformPage(View view, float position) { - if (position < -1) { - view.setAlpha(0); - } else if (position <= 1) { - view.setAlpha(1); - view.setTranslationX(view.getWidth() * -position); - float yPosition = position * view.getHeight(); - view.setTranslationY(yPosition); - } else { - view.setAlpha(0); - } - } - } - - private MotionEvent swapXY(MotionEvent ev) { - float width = getWidth(); - float height = getHeight(); - float newX = (ev.getY() / height) * width; - float newY = (ev.getX() / width) * height; - ev.setLocation(newX, newY); - return ev; - } - - @Override - public boolean onInterceptTouchEvent(MotionEvent ev){ - boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); - swapXY(ev); - return intercepted; - } - - @Override - public boolean onTouchEvent(MotionEvent ev) { - return super.onTouchEvent(swapXY(ev)); - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerActivity.java deleted file mode 100644 index ba7fb7f..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerActivity.java +++ /dev/null @@ -1,98 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.viewpager; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentStatePagerAdapter; -import android.support.v4.view.ViewPager; -import android.view.View; - -import com.davemorrissey.labs.subscaleview.sample.AbstractPagesActivity; -import com.davemorrissey.labs.subscaleview.sample.Page; -import com.davemorrissey.labs.subscaleview.sample.R; - -import java.util.Arrays; - -import static com.davemorrissey.labs.subscaleview.sample.R.layout.view_pager; -import static com.davemorrissey.labs.subscaleview.sample.R.string.pager_p1_subtitle; -import static com.davemorrissey.labs.subscaleview.sample.R.string.pager_p1_text; -import static com.davemorrissey.labs.subscaleview.sample.R.string.pager_p2_subtitle; -import static com.davemorrissey.labs.subscaleview.sample.R.string.pager_p2_text; -import static com.davemorrissey.labs.subscaleview.sample.R.string.pager_title; - -public class ViewPagerActivity extends AbstractPagesActivity { - - private static final String[] IMAGES = { "eagle.jpg", "pony.jpg" }; - - public ViewPagerActivity() { - super(pager_title, view_pager, Arrays.asList( - new Page(pager_p1_subtitle, pager_p1_text), - new Page(pager_p2_subtitle, pager_p2_text) - )); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - ViewPager horizontalPager = findViewById(R.id.horizontal_pager); - horizontalPager.setAdapter(new ScreenSlidePagerAdapter(getSupportFragmentManager())); - ViewPager verticalPager = findViewById(R.id.vertical_pager); - verticalPager.setAdapter(new ScreenSlidePagerAdapter(getSupportFragmentManager())); - } - - @Override - public void onBackPressed() { - ViewPager viewPager = findViewById(getPage() == 0 ? R.id.horizontal_pager : R.id.vertical_pager); - if (viewPager.getCurrentItem() == 0) { - super.onBackPressed(); - } else { - viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); - } - } - - @Override - protected void onPageChanged(int page) { - if (getPage() == 0) { - findViewById(R.id.horizontal_pager).setVisibility(View.VISIBLE); - findViewById(R.id.vertical_pager).setVisibility(View.GONE); - } else { - findViewById(R.id.horizontal_pager).setVisibility(View.GONE); - findViewById(R.id.vertical_pager).setVisibility(View.VISIBLE); - } - } - - private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { - ScreenSlidePagerAdapter(FragmentManager fm) { - super(fm); - } - - @Override - public Fragment getItem(int position) { - ViewPagerFragment fragment = new ViewPagerFragment(); - fragment.setAsset(IMAGES[position]); - return fragment; - } - - @Override - public int getCount() { - return IMAGES.length; - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerFragment.java deleted file mode 100644 index 442c84b..0000000 --- a/sample/src/main/java/com/davemorrissey/labs/subscaleview/sample/viewpager/ViewPagerFragment.java +++ /dev/null @@ -1,69 +0,0 @@ -/* -Copyright 2014 David Morrissey - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package com.davemorrissey.labs.subscaleview.sample.viewpager; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.davemorrissey.labs.subscaleview.ImageSource; -import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; -import com.davemorrissey.labs.subscaleview.sample.R.id; -import com.davemorrissey.labs.subscaleview.sample.R.layout; - -public class ViewPagerFragment extends Fragment { - - private static final String BUNDLE_ASSET = "asset"; - - private String asset; - - public ViewPagerFragment() { - } - - public void setAsset(String asset) { - this.asset = asset; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(layout.view_pager_page, container, false); - - if (savedInstanceState != null) { - if (asset == null && savedInstanceState.containsKey(BUNDLE_ASSET)) { - asset = savedInstanceState.getString(BUNDLE_ASSET); - } - } - if (asset != null) { - SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); - imageView.setImage(ImageSource.asset(asset)); - } - - return rootView; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - View rootView = getView(); - if (rootView != null) { - outState.putString(BUNDLE_ASSET, asset); - } - } - -} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractFragmentsActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractFragmentsActivity.java new file mode 100644 index 0000000..1694d2a --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractFragmentsActivity.java @@ -0,0 +1,98 @@ +/* +Copyright 2017 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test; + +import android.app.ActionBar; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; +import android.view.MenuItem; + +import java.util.List; + +public abstract class AbstractFragmentsActivity extends FragmentActivity { + + private static final String BUNDLE_PAGE = "page"; + + private int page; + + private final int title; + private final int layout; + private final List notes; + + protected abstract void onPageChanged(int page); + + protected AbstractFragmentsActivity(int title, int layout, List notes) { + this.title = title; + this.layout = layout; + this.notes = notes; + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(layout); + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setTitle(getString(title)); + actionBar.setDisplayHomeAsUpEnabled(true); + } + if (savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_PAGE)) { + page = savedInstanceState.getInt(BUNDLE_PAGE); + } + } + + @Override + protected void onResume() { + super.onResume(); + updateNotes(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(BUNDLE_PAGE, page); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return true; + } + + public void next() { + page++; + updateNotes(); + } + + public void previous() { + page--; + updateNotes(); + } + + private void updateNotes() { + if (page > notes.size() - 1) { + return; + } + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setSubtitle(notes.get(page).getSubtitle()); + } + onPageChanged(page); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractPagesActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractPagesActivity.java new file mode 100644 index 0000000..f8de39a --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/AbstractPagesActivity.java @@ -0,0 +1,115 @@ +/* +Copyright 2017 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test; + +import android.app.ActionBar; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.FragmentActivity; +import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import java.util.List; + +public abstract class AbstractPagesActivity extends FragmentActivity { + + private static final String BUNDLE_PAGE = "page"; + + private int page; + + private final int title; + private final int layout; + private final List notes; + + protected AbstractPagesActivity(int title, int layout, List notes) { + this.title = title; + this.layout = layout; + this.notes = notes; + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(layout); + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setTitle(getString(title)); + actionBar.setDisplayHomeAsUpEnabled(true); + } + findViewById(R.id.next).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { next(); } + }); + findViewById(R.id.previous).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { previous(); } + }); + if (savedInstanceState != null && savedInstanceState.containsKey(BUNDLE_PAGE)) { + page = savedInstanceState.getInt(BUNDLE_PAGE); + } + } + + @Override + protected void onResume() { + super.onResume(); + updateNotes(); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putInt(BUNDLE_PAGE, page); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + finish(); + return true; + } + + private void next() { + page++; + updateNotes(); + } + + private void previous() { + page--; + updateNotes(); + } + + private void updateNotes() { + if (page > notes.size() - 1) { + return; + } + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setSubtitle(notes.get(page).getSubtitle()); + } + ((TextView)findViewById(R.id.note)).setText(notes.get(page).getText()); + findViewById(R.id.next).setVisibility(page >= notes.size() - 1 ? View.INVISIBLE : View.VISIBLE); + findViewById(R.id.previous).setVisibility(page <= 0 ? View.INVISIBLE : View.VISIBLE); + onPageChanged(page); + } + + protected final int getPage() { + return page; + } + + protected void onPageChanged(int page) { + + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/MainActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/MainActivity.java new file mode 100644 index 0000000..28e9089 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/MainActivity.java @@ -0,0 +1,95 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test; + +import android.app.ActionBar; +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; + +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.animation.AnimationActivity; +import com.davemorrissey.labs.subscaleview.test.basicfeatures.BasicFeaturesActivity; +import com.davemorrissey.labs.subscaleview.test.configuration.ConfigurationActivity; +import com.davemorrissey.labs.subscaleview.test.eventhandling.EventHandlingActivity; +import com.davemorrissey.labs.subscaleview.test.eventhandlingadvanced.AdvancedEventHandlingActivity; +import com.davemorrissey.labs.subscaleview.test.extension.ExtensionActivity; +import com.davemorrissey.labs.subscaleview.test.imagedisplay.ImageDisplayActivity; +import com.davemorrissey.labs.subscaleview.test.viewpager.ViewPagerActivity; + +public class MainActivity extends Activity implements View.OnClickListener { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setTitle(R.string.main_title); + } + setContentView(R.layout.main); + findViewById(id.basicFeatures).setOnClickListener(this); + findViewById(id.imageDisplay).setOnClickListener(this); + findViewById(id.eventHandling).setOnClickListener(this); + findViewById(id.advancedEventHandling).setOnClickListener(this); + findViewById(id.viewPagerGalleries).setOnClickListener(this); + findViewById(id.animation).setOnClickListener(this); + findViewById(id.extension).setOnClickListener(this); + findViewById(id.configuration).setOnClickListener(this); + findViewById(id.github).setOnClickListener(this); + findViewById(id.self).setOnClickListener(this); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case id.basicFeatures: startActivity(BasicFeaturesActivity.class); break; + case id.imageDisplay: startActivity(ImageDisplayActivity.class); break; + case id.eventHandling: startActivity(EventHandlingActivity.class); break; + case id.advancedEventHandling: startActivity(AdvancedEventHandlingActivity.class); break; + case id.viewPagerGalleries: startActivity(ViewPagerActivity.class); break; + case id.animation: startActivity(AnimationActivity.class); break; + case id.extension: startActivity(ExtensionActivity.class); break; + case id.configuration: startActivity(ConfigurationActivity.class); break; + case id.github: openGitHub(); break; + case id.self: openSelf(); break; + } + } + + private void startActivity(Class activity) { + Intent intent = new Intent(this, activity); + startActivity(intent); + } + + private void openGitHub() { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse("https://github.com/davemorrissey/subsampling-scale-image-view")); + startActivity(i); + } + + private void openSelf() { + Intent i = new Intent(Intent.ACTION_VIEW); + i.setData(Uri.parse("http://www.davemorrissey.com")); + startActivity(i); + } + + @Override + public void onBackPressed() { + moveTaskToBack(true); + } +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/Page.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/Page.java new file mode 100644 index 0000000..2582334 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/Page.java @@ -0,0 +1,37 @@ +/* +Copyright 2017 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test; + +public class Page { + + private final int text; + + private final int subtitle; + + public Page(int subtitle, int text) { + this.subtitle = subtitle; + this.text = text; + } + + public int getText() { + return text; + } + + public int getSubtitle() { + return subtitle; + } +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java new file mode 100644 index 0000000..31cd2fd --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/animation/AnimationActivity.java @@ -0,0 +1,87 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.animation; + +import android.graphics.PointF; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.view.View; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.AnimationBuilder; +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.extension.views.PinView; + +import java.util.Arrays; +import java.util.Random; + +import static com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.*; +import static com.davemorrissey.labs.subscaleview.test.R.string.*; +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; + +public class AnimationActivity extends AbstractPagesActivity { + + private PinView view; + + public AnimationActivity() { + super(animation_title, animation_activity, Arrays.asList( + new Page(animation_p1_subtitle, animation_p1_text), + new Page(animation_p2_subtitle, animation_p2_text), + new Page(animation_p3_subtitle, animation_p3_text), + new Page(animation_p4_subtitle, animation_p4_text) + )); + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + findViewById(id.play).setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { AnimationActivity.this.play(); } + }); + view = findViewById(id.imageView); + view.setImage(ImageSource.asset("squirrel.jpg")); + } + + @Override + protected void onPageChanged(int page) { + if (page == 2) { + view.setPanLimit(PAN_LIMIT_CENTER); + } else { + view.setPanLimit(PAN_LIMIT_INSIDE); + } + } + + private void play() { + Random random = new Random(); + if (view.isReady()) { + float maxScale = view.getMaxScale(); + float minScale = view.getMinScale(); + float scale = (random.nextFloat() * (maxScale - minScale)) + minScale; + PointF center = new PointF(random.nextInt(view.getSWidth()), random.nextInt(view.getSHeight())); + view.setPin(center); + AnimationBuilder animationBuilder = view.animateScaleAndCenter(scale, center); + if (getPage() == 3) { + animationBuilder.withDuration(2000).withEasing(EASE_OUT_QUAD).withInterruptible(false).start(); + } else { + animationBuilder.withDuration(750).start(); + } + } + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java new file mode 100644 index 0000000..654ca02 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/basicfeatures/BasicFeaturesActivity.java @@ -0,0 +1,52 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.basicfeatures; + +import android.os.Bundle; +import android.support.annotation.Nullable; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; + +import java.util.Arrays; + +import static com.davemorrissey.labs.subscaleview.test.R.string.*; +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; + +public class BasicFeaturesActivity extends AbstractPagesActivity { + + public BasicFeaturesActivity() { + super(basic_title, pages_activity, Arrays.asList( + new Page(basic_p1_subtitle, basic_p1_text), + new Page(basic_p2_subtitle, basic_p2_text), + new Page(basic_p3_subtitle, basic_p3_text), + new Page(basic_p4_subtitle, basic_p4_text), + new Page(basic_p5_subtitle, basic_p5_text) + )); + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + SubsamplingScaleImageView view = findViewById(id.imageView); + view.setImage(ImageSource.asset("pony.jpg")); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java new file mode 100644 index 0000000..1f81295 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/configuration/ConfigurationActivity.java @@ -0,0 +1,110 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.configuration; + +import android.graphics.PointF; +import android.os.Bundle; +import android.support.annotation.Nullable; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; + +import java.util.Arrays; + +import static com.davemorrissey.labs.subscaleview.test.R.string.*; +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; + +public class ConfigurationActivity extends AbstractPagesActivity { + + private SubsamplingScaleImageView view; + + public ConfigurationActivity() { + super(configuration_title, pages_activity, Arrays.asList( + new Page(configuration_p1_subtitle, configuration_p1_text), + new Page(configuration_p2_subtitle, configuration_p2_text), + new Page(configuration_p3_subtitle, configuration_p3_text), + new Page(configuration_p4_subtitle, configuration_p4_text), + new Page(configuration_p5_subtitle, configuration_p5_text), + new Page(configuration_p6_subtitle, configuration_p6_text), + new Page(configuration_p7_subtitle, configuration_p7_text), + new Page(configuration_p8_subtitle, configuration_p8_text), + new Page(configuration_p9_subtitle, configuration_p9_text), + new Page(configuration_p10_subtitle, configuration_p10_text) + )); + } + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + view = findViewById(id.imageView); + view.setImage(ImageSource.asset("eagle.jpg")); + } + + @Override + protected void onPageChanged(int page) { + if (page == 0) { + view.setMinimumDpi(50); + } else { + view.setMaxScale(2F); + } + if (page == 1) { + view.setMinimumTileDpi(50); + } else { + view.setMinimumTileDpi(500); + } + if (page == 4) { + view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER); + } else if (page == 5) { + view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_CENTER_IMMEDIATE); + } else { + view.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED); + } + if (page == 6) { + view.setDoubleTapZoomDpi(240); + } else { + view.setDoubleTapZoomScale(1F); + } + if (page == 7) { + view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_CENTER); + } else if (page == 8) { + view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_OUTSIDE); + } else { + view.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE); + } + if (page == 9) { + view.setDebug(true); + } else { + view.setDebug(false); + } + if (page == 2) { + view.setScaleAndCenter(0f, new PointF(2456, 1632)); + view.setPanEnabled(false); + } else { + view.setPanEnabled(true); + } + if (page == 3) { + view.setScaleAndCenter(1f, new PointF(2456, 1632)); + view.setZoomEnabled(false); + } else { + view.setZoomEnabled(true); + } + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java new file mode 100644 index 0000000..dac6f08 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandling/EventHandlingActivity.java @@ -0,0 +1,57 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.eventhandling; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; + +import java.util.Arrays; + +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; +import static com.davemorrissey.labs.subscaleview.test.R.string.*; + +public class EventHandlingActivity extends AbstractPagesActivity { + + public EventHandlingActivity() { + super(event_title, pages_activity, Arrays.asList( + new Page(event_p1_subtitle, event_p1_text), + new Page(event_p2_subtitle, event_p2_text), + new Page(event_p3_subtitle, event_p3_text) + )); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + SubsamplingScaleImageView imageView = findViewById(id.imageView); + imageView.setImage(ImageSource.asset("pony.jpg")); + imageView.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { Toast.makeText(v.getContext(), "Clicked", Toast.LENGTH_SHORT).show(); } + }); + imageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override public boolean onLongClick(View v) { Toast.makeText(v.getContext(), "Long clicked", Toast.LENGTH_SHORT).show(); return true; } + }); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java new file mode 100644 index 0000000..1e65f1f --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/eventhandlingadvanced/AdvancedEventHandlingActivity.java @@ -0,0 +1,94 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.eventhandlingadvanced; + +import android.graphics.PointF; +import android.os.Bundle; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.widget.Toast; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; + +import java.util.Arrays; + +import static com.davemorrissey.labs.subscaleview.test.R.string.*; +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; + +public class AdvancedEventHandlingActivity extends AbstractPagesActivity { + + public AdvancedEventHandlingActivity() { + super(advancedevent_title, pages_activity, Arrays.asList( + new Page(advancedevent_p1_subtitle, advancedevent_p1_text), + new Page(advancedevent_p2_subtitle, advancedevent_p2_text), + new Page(advancedevent_p3_subtitle, advancedevent_p3_text), + new Page(advancedevent_p4_subtitle, advancedevent_p4_text), + new Page(advancedevent_p5_subtitle, advancedevent_p5_text) + )); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + final SubsamplingScaleImageView imageView = findViewById(id.imageView); + final GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (imageView.isReady()) { + PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); + Toast.makeText(getApplicationContext(), "Single tap: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), "Single tap: Image not ready", Toast.LENGTH_SHORT).show(); + } + return true; + } + @Override + public void onLongPress(MotionEvent e) { + if (imageView.isReady()) { + PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); + Toast.makeText(getApplicationContext(), "Long press: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), "Long press: Image not ready", Toast.LENGTH_SHORT).show(); + } + } + @Override + public boolean onDoubleTap(MotionEvent e) { + if (imageView.isReady()) { + PointF sCoord = imageView.viewToSourceCoord(e.getX(), e.getY()); + Toast.makeText(getApplicationContext(), "Double tap: " + ((int)sCoord.x) + ", " + ((int)sCoord.y), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), "Double tap: Image not ready", Toast.LENGTH_SHORT).show(); + } + return true; + } + }); + + imageView.setImage(ImageSource.asset("squirrel.jpg")); + imageView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + return gestureDetector.onTouchEvent(motionEvent); + } + }); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionActivity.java new file mode 100644 index 0000000..b767a42 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionActivity.java @@ -0,0 +1,67 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension; + +import android.support.v4.app.Fragment; +import android.util.Log; + +import com.davemorrissey.labs.subscaleview.test.AbstractFragmentsActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.imagedisplay.ImageDisplayActivity; + +import java.util.Arrays; +import java.util.List; + +import static com.davemorrissey.labs.subscaleview.test.R.layout.fragments_activity; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p1_subtitle; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p1_text; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p2_subtitle; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p2_text; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p3_subtitle; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_p3_text; +import static com.davemorrissey.labs.subscaleview.test.R.string.extension_title; + +public class ExtensionActivity extends AbstractFragmentsActivity { + + private static final List> FRAGMENTS = Arrays.asList( + ExtensionPinFragment.class, + ExtensionCircleFragment.class, + ExtensionFreehandFragment.class + ); + + public ExtensionActivity() { + super(extension_title, fragments_activity, Arrays.asList( + new Page(extension_p1_subtitle, extension_p1_text), + new Page(extension_p2_subtitle, extension_p2_text), + new Page(extension_p3_subtitle, extension_p3_text) + )); + } + + @Override + protected void onPageChanged(int page) { + try { + getSupportFragmentManager() + .beginTransaction() + .replace(id.frame, FRAGMENTS.get(page).newInstance()) + .commit(); + } catch (Exception e) { + Log.e(ImageDisplayActivity.class.getName(), "Failed to load fragment", e); + } + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java new file mode 100644 index 0000000..e448e7a --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionCircleFragment.java @@ -0,0 +1,46 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; + +public class ExtensionCircleFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.extension_circle_fragment, container, false); + rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).next(); } + }); + rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ExtensionActivity) ExtensionCircleFragment.this.getActivity()).previous(); } + }); + SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset("squirrel.jpg")); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java new file mode 100644 index 0000000..4d2c5c5 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionFreehandFragment.java @@ -0,0 +1,46 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; +import com.davemorrissey.labs.subscaleview.test.extension.views.FreehandView; + +public class ExtensionFreehandFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.extension_freehand_fragment, container, false); + rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ExtensionActivity) ExtensionFreehandFragment.this.getActivity()).previous(); } + }); + final FreehandView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset("squirrel.jpg")); + rootView.findViewById(id.reset).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { imageView.reset(); } + }); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java new file mode 100644 index 0000000..4dd4c4f --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/ExtensionPinFragment.java @@ -0,0 +1,45 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension; + +import android.graphics.PointF; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; +import com.davemorrissey.labs.subscaleview.test.extension.views.PinView; + +public class ExtensionPinFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.extension_pin_fragment, container, false); + rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ExtensionActivity) ExtensionPinFragment.this.getActivity()).next(); } + }); + PinView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset("squirrel.jpg")); + imageView.setPin(new PointF(1718f, 581f)); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/CircleView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/CircleView.java new file mode 100644 index 0000000..f3045f0 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/CircleView.java @@ -0,0 +1,72 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension.views; + +import android.content.Context; +import android.graphics.*; +import android.graphics.Paint.Cap; +import android.graphics.Paint.Style; +import android.util.AttributeSet; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; + +public class CircleView extends SubsamplingScaleImageView { + + private int strokeWidth; + + private final PointF sCenter = new PointF(); + private final PointF vCenter = new PointF(); + private final Paint paint = new Paint(); + + public CircleView(Context context) { + this(context, null); + } + + public CircleView(Context context, AttributeSet attr) { + super(context, attr); + initialise(); + } + + private void initialise() { + float density = getResources().getDisplayMetrics().densityDpi; + strokeWidth = (int)(density/60f); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // Don't draw pin before image is ready so it doesn't move around during setup. + if (!isReady()) { + return; + } + + sCenter.set(getSWidth()/2, getSHeight()/2); + sourceToViewCoord(sCenter, vCenter); + float radius = (getScale() * getSWidth()) * 0.25f; + + paint.setAntiAlias(true); + paint.setStyle(Style.STROKE); + paint.setStrokeCap(Cap.ROUND); + paint.setStrokeWidth(strokeWidth * 2); + paint.setColor(Color.BLACK); + canvas.drawCircle(vCenter.x, vCenter.y, radius, paint); + paint.setStrokeWidth(strokeWidth); + paint.setColor(Color.argb(255, 51, 181, 229)); + canvas.drawCircle(vCenter.x, vCenter.y, radius, paint); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/FreehandView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/FreehandView.java new file mode 100644 index 0000000..c815749 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/FreehandView.java @@ -0,0 +1,157 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension.views; + +import android.content.Context; +import android.graphics.*; +import android.graphics.Paint.Cap; +import android.graphics.Paint.Style; +import android.support.annotation.NonNull; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; + +import java.util.ArrayList; +import java.util.List; + +public class FreehandView extends SubsamplingScaleImageView implements OnTouchListener { + + private final Paint paint = new Paint(); + private final Path vPath = new Path(); + private final PointF vPoint = new PointF(); + private PointF vPrev = new PointF(); + private PointF vPrevious; + private PointF vStart; + private boolean drawing = false; + + private int strokeWidth; + + private List sPoints; + + public FreehandView(Context context, AttributeSet attr) { + super(context, attr); + initialise(); + } + + public FreehandView(Context context) { + this(context, null); + } + + private void initialise() { + setOnTouchListener(this); + float density = getResources().getDisplayMetrics().densityDpi; + strokeWidth = (int)(density/60f); + } + + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + return false; + } + + @Override + public boolean onTouchEvent(@NonNull MotionEvent event) { + if (sPoints != null && !drawing) { + return super.onTouchEvent(event); + } + boolean consumed = false; + int touchCount = event.getPointerCount(); + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + if (event.getActionIndex() == 0) { + vStart = new PointF(event.getX(), event.getY()); + vPrevious = new PointF(event.getX(), event.getY()); + } else { + vStart = null; + vPrevious = null; + } + break; + case MotionEvent.ACTION_MOVE: + PointF sCurrentF = viewToSourceCoord(event.getX(), event.getY()); + PointF sCurrent = new PointF(sCurrentF.x, sCurrentF.y); + PointF sStart = vStart == null ? null : new PointF(viewToSourceCoord(vStart).x, viewToSourceCoord(vStart).y); + + if (touchCount == 1 && vStart != null) { + float vDX = Math.abs(event.getX() - vPrevious.x); + float vDY = Math.abs(event.getY() - vPrevious.y); + if (vDX >= strokeWidth * 5 || vDY >= strokeWidth * 5) { + if (sPoints == null) { + sPoints = new ArrayList<>(); + sPoints.add(sStart); + } + sPoints.add(sCurrent); + vPrevious.x = event.getX(); + vPrevious.y = event.getY(); + drawing = true; + } + consumed = true; + invalidate(); + } else if (touchCount == 1) { + // Consume all one touch drags to prevent odd panning effects handled by the superclass. + consumed = true; + } + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_POINTER_UP: + invalidate(); + drawing = false; + vPrevious = null; + vStart = null; + } + // Use parent to handle pinch and two-finger pan. + return consumed || super.onTouchEvent(event); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // Don't draw anything before image is ready. + if (!isReady()) { + return; + } + + paint.setAntiAlias(true); + + if (sPoints != null && sPoints.size() >= 2) { + vPath.reset(); + sourceToViewCoord(sPoints.get(0).x, sPoints.get(0).y, vPrev); + vPath.moveTo(vPrev.x, vPrev.y); + for (int i = 1; i < sPoints.size(); i++) { + sourceToViewCoord(sPoints.get(i).x, sPoints.get(i).y, vPoint); + vPath.quadTo(vPrev.x, vPrev.y, (vPoint.x + vPrev.x) / 2, (vPoint.y + vPrev.y) / 2); + vPrev = vPoint; + } + paint.setStyle(Style.STROKE); + paint.setStrokeCap(Cap.ROUND); + paint.setStrokeWidth(strokeWidth * 2); + paint.setColor(Color.BLACK); + canvas.drawPath(vPath, paint); + paint.setStrokeWidth(strokeWidth); + paint.setColor(Color.argb(255, 51, 181, 229)); + canvas.drawPath(vPath, paint); + } + + } + + public void reset() { + this.sPoints = null; + invalidate(); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/PinView.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/PinView.java new file mode 100644 index 0000000..f219aec --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/extension/views/PinView.java @@ -0,0 +1,76 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.extension.views; + +import android.content.Context; +import android.graphics.*; +import android.util.AttributeSet; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.drawable; + + +public class PinView extends SubsamplingScaleImageView { + + private final Paint paint = new Paint(); + private final PointF vPin = new PointF(); + private PointF sPin; + private Bitmap pin; + + public PinView(Context context) { + this(context, null); + } + + public PinView(Context context, AttributeSet attr) { + super(context, attr); + initialise(); + } + + public void setPin(PointF sPin) { + this.sPin = sPin; + initialise(); + invalidate(); + } + + private void initialise() { + float density = getResources().getDisplayMetrics().densityDpi; + pin = BitmapFactory.decodeResource(this.getResources(), drawable.pushpin_blue); + float w = (density/420f) * pin.getWidth(); + float h = (density/420f) * pin.getHeight(); + pin = Bitmap.createScaledBitmap(pin, (int)w, (int)h, true); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + // Don't draw pin before image is ready so it doesn't move around during setup. + if (!isReady()) { + return; + } + + paint.setAntiAlias(true); + + if (sPin != null && pin != null) { + sourceToViewCoord(sPin, vPin); + float vX = vPin.x - (pin.getWidth()/2); + float vY = vPin.y - pin.getHeight(); + canvas.drawBitmap(pin, vX, vY, paint); + } + + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayActivity.java new file mode 100644 index 0000000..d871ee4 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayActivity.java @@ -0,0 +1,60 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.imagedisplay; + +import android.support.v4.app.Fragment; +import android.util.Log; + +import com.davemorrissey.labs.subscaleview.test.AbstractFragmentsActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R.id; + +import java.util.Arrays; +import java.util.List; + +import static com.davemorrissey.labs.subscaleview.test.R.string.*; +import static com.davemorrissey.labs.subscaleview.test.R.layout.*; + +public class ImageDisplayActivity extends AbstractFragmentsActivity { + + private static final List> FRAGMENTS = Arrays.asList( + ImageDisplayLargeFragment.class, + ImageDisplayRotateFragment.class, + ImageDisplayRegionFragment.class + ); + + public ImageDisplayActivity() { + super(display_title, fragments_activity, Arrays.asList( + new Page(display_p1_subtitle, display_p1_text), + new Page(display_p2_subtitle, display_p2_text), + new Page(display_p3_subtitle, display_p3_text) + )); + } + + @Override + protected void onPageChanged(int page) { + try { + getSupportFragmentManager() + .beginTransaction() + .replace(id.frame, FRAGMENTS.get(page).newInstance()) + .commit(); + } catch (Exception e) { + Log.e(ImageDisplayActivity.class.getName(), "Failed to load fragment", e); + } + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java new file mode 100644 index 0000000..ada7aa6 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayLargeFragment.java @@ -0,0 +1,43 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.imagedisplay; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; + +public class ImageDisplayLargeFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.imagedisplay_large_fragment, container, false); + rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayLargeFragment.this.getActivity()).next(); } + }); + SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset("card.png")); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java new file mode 100644 index 0000000..889e064 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRegionFragment.java @@ -0,0 +1,48 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.imagedisplay; + +import android.graphics.Rect; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; + +public class ImageDisplayRegionFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.imagedisplay_region_fragment, container, false); + final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); + imageView.setOrientation(SubsamplingScaleImageView.ORIENTATION_90); + imageView.setImage(ImageSource.asset("card.png").region(new Rect(0, 0, 3778, 2834))); + rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRegionFragment.this.getActivity()).previous(); } + }); + rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); } + }); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java new file mode 100644 index 0000000..15632db --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/imagedisplay/ImageDisplayRotateFragment.java @@ -0,0 +1,50 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.imagedisplay; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; + +public class ImageDisplayRotateFragment extends Fragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.imagedisplay_rotate_fragment, container, false); + final SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset("eagle.jpg")); + imageView.setOrientation(90); + rootView.findViewById(id.previous).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).previous(); } + }); + rootView.findViewById(id.next).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { ((ImageDisplayActivity) ImageDisplayRotateFragment.this.getActivity()).next(); } + }); + rootView.findViewById(id.rotate).setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { imageView.setOrientation((imageView.getOrientation() + 90) % 360); } + }); + return rootView; + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java new file mode 100644 index 0000000..3d64042 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/VerticalViewPager.java @@ -0,0 +1,67 @@ +package com.davemorrissey.labs.subscaleview.test.viewpager; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; + +/** + * From http://stackoverflow.com/a/22797619/2719186 + */ +public class VerticalViewPager extends ViewPager { + + public VerticalViewPager(Context context) { + super(context); + init(); + } + + public VerticalViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + private void init() { + setPageTransformer(true, new VerticalPageTransformer()); + setOverScrollMode(OVER_SCROLL_NEVER); + } + + private class VerticalPageTransformer implements ViewPager.PageTransformer { + + @Override + public void transformPage(View view, float position) { + if (position < -1) { + view.setAlpha(0); + } else if (position <= 1) { + view.setAlpha(1); + view.setTranslationX(view.getWidth() * -position); + float yPosition = position * view.getHeight(); + view.setTranslationY(yPosition); + } else { + view.setAlpha(0); + } + } + } + + private MotionEvent swapXY(MotionEvent ev) { + float width = getWidth(); + float height = getHeight(); + float newX = (ev.getY() / height) * width; + float newY = (ev.getX() / width) * height; + ev.setLocation(newX, newY); + return ev; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev){ + boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); + swapXY(ev); + return intercepted; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + return super.onTouchEvent(swapXY(ev)); + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java new file mode 100644 index 0000000..30eebfe --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerActivity.java @@ -0,0 +1,98 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.viewpager; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentStatePagerAdapter; +import android.support.v4.view.ViewPager; +import android.view.View; + +import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; +import com.davemorrissey.labs.subscaleview.test.Page; +import com.davemorrissey.labs.subscaleview.test.R; + +import java.util.Arrays; + +import static com.davemorrissey.labs.subscaleview.test.R.layout.view_pager; +import static com.davemorrissey.labs.subscaleview.test.R.string.pager_p1_subtitle; +import static com.davemorrissey.labs.subscaleview.test.R.string.pager_p1_text; +import static com.davemorrissey.labs.subscaleview.test.R.string.pager_p2_subtitle; +import static com.davemorrissey.labs.subscaleview.test.R.string.pager_p2_text; +import static com.davemorrissey.labs.subscaleview.test.R.string.pager_title; + +public class ViewPagerActivity extends AbstractPagesActivity { + + private static final String[] IMAGES = { "eagle.jpg", "pony.jpg" }; + + public ViewPagerActivity() { + super(pager_title, view_pager, Arrays.asList( + new Page(pager_p1_subtitle, pager_p1_text), + new Page(pager_p2_subtitle, pager_p2_text) + )); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ViewPager horizontalPager = findViewById(R.id.horizontal_pager); + horizontalPager.setAdapter(new ScreenSlidePagerAdapter(getSupportFragmentManager())); + ViewPager verticalPager = findViewById(R.id.vertical_pager); + verticalPager.setAdapter(new ScreenSlidePagerAdapter(getSupportFragmentManager())); + } + + @Override + public void onBackPressed() { + ViewPager viewPager = findViewById(getPage() == 0 ? R.id.horizontal_pager : R.id.vertical_pager); + if (viewPager.getCurrentItem() == 0) { + super.onBackPressed(); + } else { + viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); + } + } + + @Override + protected void onPageChanged(int page) { + if (getPage() == 0) { + findViewById(R.id.horizontal_pager).setVisibility(View.VISIBLE); + findViewById(R.id.vertical_pager).setVisibility(View.GONE); + } else { + findViewById(R.id.horizontal_pager).setVisibility(View.GONE); + findViewById(R.id.vertical_pager).setVisibility(View.VISIBLE); + } + } + + private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { + ScreenSlidePagerAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public Fragment getItem(int position) { + ViewPagerFragment fragment = new ViewPagerFragment(); + fragment.setAsset(IMAGES[position]); + return fragment; + } + + @Override + public int getCount() { + return IMAGES.length; + } + } + +} diff --git a/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerFragment.java b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerFragment.java new file mode 100644 index 0000000..7058137 --- /dev/null +++ b/sample/src/main/java/com/davemorrissey/labs/subscaleview/test/viewpager/ViewPagerFragment.java @@ -0,0 +1,69 @@ +/* +Copyright 2014 David Morrissey + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.davemorrissey.labs.subscaleview.test.viewpager; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.davemorrissey.labs.subscaleview.ImageSource; +import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView; +import com.davemorrissey.labs.subscaleview.test.R.id; +import com.davemorrissey.labs.subscaleview.test.R.layout; + +public class ViewPagerFragment extends Fragment { + + private static final String BUNDLE_ASSET = "asset"; + + private String asset; + + public ViewPagerFragment() { + } + + public void setAsset(String asset) { + this.asset = asset; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(layout.view_pager_page, container, false); + + if (savedInstanceState != null) { + if (asset == null && savedInstanceState.containsKey(BUNDLE_ASSET)) { + asset = savedInstanceState.getString(BUNDLE_ASSET); + } + } + if (asset != null) { + SubsamplingScaleImageView imageView = rootView.findViewById(id.imageView); + imageView.setImage(ImageSource.asset(asset)); + } + + return rootView; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + View rootView = getView(); + if (rootView != null) { + outState.putString(BUNDLE_ASSET, asset); + } + } + +} diff --git a/sample/src/main/res/layout/animation_activity.xml b/sample/src/main/res/layout/animation_activity.xml index 5416a88..c8adca9 100644 --- a/sample/src/main/res/layout/animation_activity.xml +++ b/sample/src/main/res/layout/animation_activity.xml @@ -19,6 +19,6 @@ - + diff --git a/sample/src/main/res/layout/extension_circle_fragment.xml b/sample/src/main/res/layout/extension_circle_fragment.xml index b1bcd76..1ad2add 100644 --- a/sample/src/main/res/layout/extension_circle_fragment.xml +++ b/sample/src/main/res/layout/extension_circle_fragment.xml @@ -14,6 +14,6 @@ - + diff --git a/sample/src/main/res/layout/extension_freehand_fragment.xml b/sample/src/main/res/layout/extension_freehand_fragment.xml index 006aa0f..4dead6d 100644 --- a/sample/src/main/res/layout/extension_freehand_fragment.xml +++ b/sample/src/main/res/layout/extension_freehand_fragment.xml @@ -20,6 +20,6 @@ - + diff --git a/sample/src/main/res/layout/extension_pin_fragment.xml b/sample/src/main/res/layout/extension_pin_fragment.xml index fd67b84..4b55e59 100644 --- a/sample/src/main/res/layout/extension_pin_fragment.xml +++ b/sample/src/main/res/layout/extension_pin_fragment.xml @@ -14,6 +14,6 @@ - + diff --git a/sample/src/main/res/layout/view_pager.xml b/sample/src/main/res/layout/view_pager.xml index c6c7bfc..6188097 100644 --- a/sample/src/main/res/layout/view_pager.xml +++ b/sample/src/main/res/layout/view_pager.xml @@ -15,6 +15,6 @@ - + diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 3c5a1f4..e291448 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ - Scale Image View Demo + SSIV Test App Subsampling Scale Image View -- cgit v1.2.3