diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 6c9fd28..7b67983 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/app/build.gradle b/app/build.gradle index da165a5..dffabc9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,4 +34,5 @@ dependencies { implementation 'com.squareup.retrofit2:converter-gson:2.4.0' implementation 'com.android.support:recyclerview-v7:27.1.1' implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'com.github.chrisbanes:PhotoView:2.1.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c565685..ac11670 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ - @@ -23,6 +24,9 @@ + diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java new file mode 100644 index 0000000..b237edf --- /dev/null +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/FullscreenImagePagerAdapter.java @@ -0,0 +1,98 @@ +package ru.volgorobot.vrcatalog.additional; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v4.view.PagerAdapter; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.DecelerateInterpolator; +import android.widget.ImageView; + +import com.github.chrisbanes.photoview.OnPhotoTapListener; +import com.github.chrisbanes.photoview.PhotoView; +import com.squareup.picasso.Picasso; + +public class FullscreenImagePagerAdapter extends PagerAdapter { + /** + * This class is designed to control the ViewPager (images of item) in the activity of viewing details of items (DetailActivity). + */ + + private Context context; + private String[] imageUris; + private Toolbar mToolbar; + private boolean mIsFullScreen; + + public FullscreenImagePagerAdapter(Context context, String[] imageUris, Toolbar toolbar, boolean isFullScreen) { + this.context = context; + this.imageUris = imageUris; + this.mToolbar = toolbar; + this.mIsFullScreen = isFullScreen; + } + + @Override + public int getCount() { + return imageUris.length; + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { + return view == object; + } + + /** + * This function initializes a new image from a URI. + * @return ImageView + */ + + @NonNull + @Override + public Object instantiateItem(@NonNull ViewGroup container, int position) { + PhotoView photoView = new PhotoView(context); + Picasso.get() + .load(imageUris[position]) + .into(photoView); + photoView.setOnPhotoTapListener(new PhotoTapListener()); + container.addView(photoView); + + return photoView; + } + + @Override + public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { + container.removeView((View) object); + } + + private class PhotoTapListener implements OnPhotoTapListener, View.OnSystemUiVisibilityChangeListener { + @Override + public void onPhotoTap(ImageView view, float x, float y) { + updateView(); + } + public void updateView() { + mIsFullScreen = !mIsFullScreen; + + if (mIsFullScreen) { + hideSystemUI(); + } else { + showSystemUI(); + } + } + private void hideSystemUI() { + mToolbar.animate().translationY(-mToolbar.getHeight()).setInterpolator(new AccelerateInterpolator(2)).start(); + } + + private void showSystemUI() { + mToolbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator(2)).start(); + } + + @Override + public void onSystemUiVisibilityChange(int visibility) { + if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { + mIsFullScreen = false; + } + + updateView(); + } + } +} diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java index 8a37717..befb9fb 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java @@ -1,6 +1,7 @@ package ru.volgorobot.vrcatalog.additional; import android.content.Context; +import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; @@ -16,6 +17,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import ru.volgorobot.vrcatalog.R; +import ru.volgorobot.vrcatalog.view.DetailActivity; +import ru.volgorobot.vrcatalog.view.FullScreenImageActivity; public class ImagePagerAdapter extends PagerAdapter { /** @@ -60,6 +63,14 @@ public class ImagePagerAdapter extends PagerAdapter { .resize(0, 313) .centerCrop() .into(imageView); + imageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent = new Intent(context, FullScreenImageActivity.class); + intent.putExtra("uris", imageUris); + context.startActivity(intent); + } + }); container.addView(imageView); return imageView; diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java index 04673ba..8a007d0 100644 --- a/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/DetailActivity.java @@ -139,7 +139,7 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It @Override public void setViewPagerContent(String[] uris) { imagePagerAdapter = new ImagePagerAdapter(DetailActivity.this, uris); - TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots); + TabLayout tabLayout = findViewById(R.id.tabDots); viewPager.setAdapter(imagePagerAdapter); setViewPagerScrollListener(); tabLayout.setupWithViewPager(viewPager); @@ -203,37 +203,4 @@ public class DetailActivity extends AppCompatActivity implements MainContract.It }; viewPager.setOnPageChangeListener(listener); } - - public static boolean setListViewHeightBasedOnItems(ListView listView) { - - ListAdapter listAdapter = listView.getAdapter(); - if (listAdapter != null) { - - int numberOfItems = listAdapter.getCount(); - - // Get total height of all items. - int totalItemsHeight = 0; - for (int itemPos = 0; itemPos < numberOfItems; itemPos++) { - View item = listAdapter.getView(itemPos, null, listView); - item.measure(0, 0); - totalItemsHeight += item.getMeasuredHeight(); - } - - // Get total height of all item dividers. - int totalDividersHeight = listView.getDividerHeight() * - (numberOfItems - 1); - - // Set list height. - ViewGroup.LayoutParams params = listView.getLayoutParams(); - params.height = totalItemsHeight + totalDividersHeight; - listView.setLayoutParams(params); - listView.requestLayout(); - - return true; - - } else { - return false; - } - - } } diff --git a/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java new file mode 100644 index 0000000..ff9cacd --- /dev/null +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java @@ -0,0 +1,72 @@ +package ru.volgorobot.vrcatalog.view; + +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.content.ContextCompat; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.MenuItem; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; + +import ru.volgorobot.vrcatalog.R; +import ru.volgorobot.vrcatalog.additional.FullscreenImagePagerAdapter; + +public class FullScreenImageActivity extends AppCompatActivity { + private Toolbar mToolbar; + private ViewPager fullscreenViewPager; + private boolean mIsFullScreen; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fullscreenimage); + + mToolbar = findViewById(R.id.toolbar); + + mToolbar.setTitle(""); + + if (mToolbar != null) { + setSupportActionBar(mToolbar); + } + + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material); + upArrow.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_ATOP); + getSupportActionBar().setHomeAsUpIndicator(upArrow); + mToolbar.bringToFront(); + + mIsFullScreen = true; + + Window window = getWindow(); + WindowManager.LayoutParams winParams = window.getAttributes(); + winParams.flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; + window.setAttributes(winParams); + + window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE + |View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); + + + fullscreenViewPager = findViewById(R.id.fullscreen_mode_viewpager); + FullscreenImagePagerAdapter adapter = new FullscreenImagePagerAdapter(FullScreenImageActivity.this, getIntent().getExtras().getStringArray("uris"), mToolbar, mIsFullScreen); + fullscreenViewPager.setAdapter(adapter); + } + + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } +} diff --git a/app/src/main/res/layout/activity_fullscreenimage.xml b/app/src/main/res/layout/activity_fullscreenimage.xml new file mode 100644 index 0000000..f09d840 --- /dev/null +++ b/app/src/main/res/layout/activity_fullscreenimage.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml index 5aff55f..40a0aa5 100644 --- a/app/src/main/res/values-v21/styles.xml +++ b/app/src/main/res/values-v21/styles.xml @@ -5,12 +5,19 @@ true @android:color/transparent + - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f49f94b..78f61cf 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -20,5 +20,10 @@ + diff --git a/build.gradle b/build.gradle index ab22a0a..e09656f 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,7 @@ allprojects { google() jcenter() mavenCentral() + maven { url "https://jitpack.io" } } }