diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/FullscreenImageView.java b/app/src/main/java/de/apps4ics/mountainnavigation/FullscreenImageView.java new file mode 100644 index 0000000..32c8152 --- /dev/null +++ b/app/src/main/java/de/apps4ics/mountainnavigation/FullscreenImageView.java @@ -0,0 +1,83 @@ +/** + * This file is part of MountainNavigation. + * + * MountainNavigation is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * MountainNavigation is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MountainNavigation. If not, see . + * + * @copyright Copyright (c) 2016 Vinzenz Rosenkanz + * + * @author Vinzenz Rosenkranz + */ + +package de.apps4ics.mountainnavigation; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Matrix; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; +import android.widget.ImageView; + +public class FullscreenImageView { + private Matrix matrix; + private float scalingFactor = 1f; + private final static float MAX_SCALING = 5f; + private final static float MIN_SCALING = 0.1f; + private ScaleGestureDetector scaleGestureDetector; + private ImageView imageView; + final AlertDialog imageDisplay; + + public FullscreenImageView(Context context, byte[] b) { + matrix = new Matrix(); + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View layout = inflater.inflate(R.layout.fullscreen_image, null, false); + imageView = (ImageView) layout.findViewById(R.id.fullscreenImageView); + imageView.setImageDrawable(MainActivity.convertByteArrayToDrawable(b)); + imageDisplay = new AlertDialog.Builder(context) + .setView(layout) + .setPositiveButton("Close", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }) + .create(); + scaleGestureDetector = new ScaleGestureDetector(context, new ImageScaleListener()); + imageView.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + scaleGestureDetector.onTouchEvent(event); + return true; + } + }); + //imageDisplay.show(); + } + + public void show() { + imageDisplay.show(); + } + + private class ImageScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { + @Override + public boolean onScale(ScaleGestureDetector detector) { + scalingFactor *= detector.getScaleFactor(); + scalingFactor = Math.max(MIN_SCALING, Math.min(scalingFactor, MAX_SCALING)); + matrix.setScale(scalingFactor, scalingFactor); + imageView.setImageMatrix(matrix); + return true; + } + } +} diff --git a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java index 1173e5e..83d638e 100644 --- a/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java +++ b/app/src/main/java/de/apps4ics/mountainnavigation/adapters/ShowEndangeredListAdapter.java @@ -22,9 +22,6 @@ package de.apps4ics.mountainnavigation.adapters; import android.app.Activity; -import android.app.AlertDialog; -import android.content.Context; -import android.content.DialogInterface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -34,6 +31,7 @@ import java.util.List; +import de.apps4ics.mountainnavigation.FullscreenImageView; import de.apps4ics.mountainnavigation.MainActivity; import de.apps4ics.mountainnavigation.R; import de.apps4ics.mountainnavigation.pois.Endangered; @@ -65,20 +63,7 @@ holder.image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LayoutInflater inflater1 = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - View layout = inflater1.inflate(R.layout.fullscreen_image, null, false); - ImageView iv = (ImageView) layout.findViewById(R.id.fullscreenImageView); - iv.setImageDrawable(MainActivity.convertByteArrayToDrawable(items.get(position).getImage(), layout.getWidth())); - final AlertDialog imageDisplay = new AlertDialog.Builder(context) - .setView(layout) - .setPositiveButton("Back", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }) - .create(); - imageDisplay.show(); + new FullscreenImageView(context, items.get(position).getImage()).show(); } }); diff --git a/app/src/main/res/layout/fullscreen_image.xml b/app/src/main/res/layout/fullscreen_image.xml index a75f828..d6a57f3 100644 --- a/app/src/main/res/layout/fullscreen_image.xml +++ b/app/src/main/res/layout/fullscreen_image.xml @@ -26,6 +26,7 @@ android:layout_width="wrap_content" android:layout_height="fill_parent" android:id="@+id/fullscreenImageView" + android:scaleType="matrix" android:layout_gravity="center" android:padding="12dp"/>