Using com.github.chrisbanes:PhotoView for Image & PDF file viewer

This commit is contained in:
Sylvain Berfini 2021-04-01 13:40:37 +02:00
parent bef62ce2b3
commit dbdc06bbff
5 changed files with 8 additions and 63 deletions

View file

@ -237,6 +237,8 @@ dependencies {
implementation 'com.github.bumptech.glide:glide:4.12.0'
kapt 'com.github.bumptech.glide:compiler:4.12.0'
implementation 'com.github.chrisbanes:PhotoView:2.3.0'
implementation platform('com.google.firebase:firebase-bom:26.4.0')
if (crashlyticsEnabled()) {
implementation 'com.google.firebase:firebase-crashlytics-ndk'

View file

@ -21,9 +21,6 @@ package org.linphone.activities.main.files.fragments
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.ScaleGestureDetector
import androidx.lifecycle.ViewModelProvider
import org.linphone.R
import org.linphone.activities.main.files.viewmodels.ImageFileViewModel
@ -36,10 +33,6 @@ class ImageViewerFragment : SecureFragment<ImageViewerFragmentBinding>() {
private lateinit var viewModel: ImageFileViewModel
private lateinit var sharedViewModel: SharedMainViewModel
private lateinit var gestureDetector: GestureDetector
private lateinit var scaleGestureDetector: ScaleGestureDetector
private var scaleFactor = 1.0f
override fun getLayoutId(): Int = R.layout.image_viewer_fragment
@SuppressLint("ClickableViewAccessibility")
@ -65,55 +58,5 @@ class ImageViewerFragment : SecureFragment<ImageViewerFragmentBinding>() {
binding.viewModel = viewModel
isSecure = arguments?.getBoolean("Secure") ?: false
gestureDetector = GestureDetector(requireContext(), object :
GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent?): Boolean {
scaleFactor = if (scaleFactor == 1.0f) 2.0f else 1.0f
binding.imageView.scaleX = scaleFactor
binding.imageView.scaleY = scaleFactor
return true
}
override fun onScroll(
e1: MotionEvent?,
e2: MotionEvent?,
distanceX: Float,
distanceY: Float
): Boolean {
if (scaleFactor <= 1.0f) return false
val scrollX = binding.imageView.scrollX + distanceX.toInt()
binding.imageView.scrollX = scrollX
val scrollY = binding.imageView.scrollY + distanceY.toInt()
binding.imageView.scrollY = scrollY
return true
}
})
scaleGestureDetector = ScaleGestureDetector(requireContext(), object :
ScaleGestureDetector.SimpleOnScaleGestureListener() {
override fun onScale(detector: ScaleGestureDetector): Boolean {
scaleFactor *= detector.scaleFactor
scaleFactor = scaleFactor.coerceIn(0.1f, 5.0f)
binding.imageView.scaleX = scaleFactor
binding.imageView.scaleY = scaleFactor
return false
}
})
binding.imageView.setOnTouchListener { _, event ->
val previousScaleFactor = scaleFactor
scaleGestureDetector.onTouchEvent(event)
if (previousScaleFactor != scaleFactor) {
// Prevent touch event from going further
return@setOnTouchListener true
}
gestureDetector.onTouchEvent(event)
return@setOnTouchListener true
}
}
}

View file

@ -28,8 +28,7 @@
android:layout_below="@id/top_bar_fragment"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView"
<com.github.chrisbanes.photoview.PhotoView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"

View file

@ -9,7 +9,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/pdf_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View file

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.4.31'
ext.kotlin_version = '1.4.32'
repositories {
google()
@ -9,14 +9,14 @@ buildscript {
maven {
url "https://plugins.gradle.org/m2/"
}
maven { url "https://www.jitpack.io" } // for com.github.chrisbanes:PhotoView
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.3'
classpath 'com.google.gms:google-services:4.3.5'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jlleitschuh.gradle:ktlint-gradle:9.1.1"
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.1'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.5.2'
}
}
@ -24,6 +24,7 @@ allprojects {
repositories {
google()
jcenter()
maven { url "https://www.jitpack.io" } // for com.github.chrisbanes:PhotoView
}
}