From aa001e7c37edd928b613235c6d4ac0586baaac7a Mon Sep 17 00:00:00 2001 From: ChronosX88 Date: Tue, 19 Feb 2019 19:30:26 +0400 Subject: [PATCH] Added ability to see images with fullscreen mode --- .idea/caches/gradle_models.ser | Bin 108690 -> 111999 bytes app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 6 +- .../additional/ImagePagerAdapter.java | 11 ++ .../vrcatalog/view/DetailActivity.java | 35 +---- .../view/FullScreenImageActivity.java | 123 ++++++++++++++++++ .../res/layout/activity_fullscreenimage.xml | 27 ++++ app/src/main/res/values-v21/styles.xml | 9 +- app/src/main/res/values/styles.xml | 5 + build.gradle | 1 + 10 files changed, 182 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java create mode 100644 app/src/main/res/layout/activity_fullscreenimage.xml diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 6c9fd28ec6b54f09c652af1fdaa7284ff856e5e0..7b679832e0362ff6aca3af764c692ec06f3af29a 100644 GIT binary patch delta 7097 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 T({5T?gY5;fdJjA@oLurB!5kOo 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/ImagePagerAdapter.java b/app/src/main/java/ru/volgorobot/vrcatalog/additional/ImagePagerAdapter.java index 8a37717..2f15b0d 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("path", imageUris[position]); + 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..92eadc6 --- /dev/null +++ b/app/src/main/java/ru/volgorobot/vrcatalog/view/FullScreenImageActivity.java @@ -0,0 +1,123 @@ +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.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 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; + +import ru.volgorobot.vrcatalog.R; + +public class FullScreenImageActivity extends AppCompatActivity implements View.OnSystemUiVisibilityChangeListener { + private Toolbar mToolbar; + 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); + + String path = getIntent().getStringExtra("path"); + + PhotoView photoView = (PhotoView) findViewById(R.id.photo_view); + + photoView.setOnPhotoTapListener(new OnPhotoTapListener() { + @Override + public void onPhotoTap(ImageView view, float x, float y) { + updateView(); + } + }); + + Picasso.get() + .load(path) + .into(photoView); + } + + + + @Override + public void onSystemUiVisibilityChange(int visibility) { + if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { + mIsFullScreen = false; + } + + 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(); + } + + public int getStatusBarHeight() { + int result = 0; + int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (resourceId > 0) { + result = getResources().getDimensionPixelSize(resourceId); + } + return result; + } + + @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..5e2a573 --- /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" } } }