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/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" } } }