Zoom for images

This commit is contained in:
Eugen Rochko 2017-03-09 21:21:55 +01:00
parent 3cb1b8e44b
commit c9b2092cf9
7 changed files with 74 additions and 71 deletions

View file

@ -40,4 +40,5 @@ dependencies {
compile('com.mikepenz:materialdrawer:5.8.2@aar') { compile('com.mikepenz:materialdrawer:5.8.2@aar') {
transitive = true transitive = true
} }
compile 'com.github.chrisbanes:PhotoView:1.3.1'
} }

View file

@ -252,11 +252,13 @@ public class SFragment extends Fragment {
FragmentManager manager = getFragmentManager(); FragmentManager manager = getFragmentManager();
manager.beginTransaction() manager.beginTransaction()
.setCustomAnimations(R.anim.zoom_in, R.anim.zoom_out, R.anim.zoom_in, R.anim.zoom_out)
.add(R.id.overlay_fragment_container, newFragment) .add(R.id.overlay_fragment_container, newFragment)
.addToBackStack(null) .addToBackStack(null)
.commit(); .commit();
break; break;
} }
case GIFV:
case VIDEO: { case VIDEO: {
Intent intent = new Intent(getContext(), ViewVideoActivity.class); Intent intent = new Intent(getContext(), ViewVideoActivity.class);
intent.putExtra("url", url); intent.putExtra("url", url);

View file

@ -1,58 +0,0 @@
/* Copyright 2017 Andrew Dawson
*
* This file is part of Tusky.
*
* Tusky 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.
*
* Tusky 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 Tusky. If not, see
* <http://www.gnu.org/licenses/>. */
package com.keylesspalace.tusky;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
public class ViewGifFragment extends Fragment {
public static ViewGifFragment newInstance(String url) {
Bundle arguments = new Bundle();
ViewGifFragment fragment = new ViewGifFragment();
arguments.putString("url", url);
fragment.setArguments(arguments);
return fragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_view_gif, container, false);
String url = getArguments().getString("url");
WebView gifView = (WebView) rootView.findViewById(R.id.gif_view);
gifView.loadUrl(url);
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return rootView;
}
private void dismiss() {
getFragmentManager().popBackStack();
}
}

View file

@ -21,8 +21,11 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.android.volley.toolbox.ImageLoader; import com.squareup.picasso.Callback;
import com.android.volley.toolbox.NetworkImageView; import com.squareup.picasso.Picasso;
import uk.co.senab.photoview.PhotoView;
import uk.co.senab.photoview.PhotoViewAttacher;
public class ViewMediaFragment extends Fragment { public class ViewMediaFragment extends Fragment {
public static ViewMediaFragment newInstance(String url) { public static ViewMediaFragment newInstance(String url) {
@ -40,17 +43,36 @@ public class ViewMediaFragment extends Fragment {
Bundle arguments = getArguments(); Bundle arguments = getArguments();
String url = arguments.getString("url"); String url = arguments.getString("url");
NetworkImageView image = (NetworkImageView) rootView.findViewById(R.id.view_media_image); PhotoView photoView = (PhotoView) rootView.findViewById(R.id.view_media_image);
ImageLoader imageLoader = VolleySingleton.getInstance(getContext()).getImageLoader();
image.setImageUrl(url, imageLoader);
rootView.setOnClickListener(new View.OnClickListener() { final PhotoViewAttacher attacher = new PhotoViewAttacher(photoView);
attacher.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
@Override @Override
public void onClick(View v) { public void onPhotoTap(View view, float x, float y) {
}
@Override
public void onOutsidePhotoTap() {
dismiss(); dismiss();
} }
}); });
Picasso.with(getContext())
.load(url)
.into(photoView, new Callback() {
@Override
public void onSuccess() {
attacher.update();
}
@Override
public void onError() {
}
});
return rootView; return rootView;
} }

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/linear_interpolator"
android:fromXScale=".1"
android:toXScale="1"
android:fromYScale=".1"
android:toYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:duration="200"
android:fillAfter="true">
</scale>
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="0"
android:toAlpha="1"
android:duration="300" />
</set>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/linear_interpolator"
android:fromXScale="1"
android:toXScale=".1"
android:fromYScale="1"
android:toYScale=".1"
android:pivotX="50%"
android:pivotY="50%"
android:duration="200"
android:fillAfter="true">
</scale>
<alpha
android:interpolator="@android:anim/linear_interpolator"
android:fromAlpha="1"
android:toAlpha="0"
android:duration="300" />
</set>

View file

@ -3,12 +3,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#60000000"> android:background="#60000000">
<uk.co.senab.photoview.PhotoView
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/view_media_image" android:id="@+id/view_media_image"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent" />
android:layout_centerInParent="true"
android:scaleType="fitCenter" />
</RelativeLayout> </RelativeLayout>