Giter VIP home page Giter VIP logo

zoomage's People

Contributors

jsibbold avatar macklinu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zoomage's Issues

Can't swipe ViewPager

After update to 1.3.0 i can't swipe to left right inside viewpager. How can i fix it?
I can't change images

support library

this is what i get when i want to sync the project

org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ':app:processDebugManifest'.
	at org.gradle.initialization.exception.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:99)
	at org.gradle.initialization.exception.DefaultExceptionAnalyser.collectFailures(DefaultExceptionAnalyser.java:65)
	at org.gradle.initialization.exception.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:39)
	at org.gradle.initialization.exception.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:29)
	at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:174)
	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:165)
	at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:134)
	at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:58)
	at org.gradle.internal.invocation.GradleBuildController$1.execute(GradleBuildController.java:55)
	at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
	at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
	at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
	at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
	at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:55)
	at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:54)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
	at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
	at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
	at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
	at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
	at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
	at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
	at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
	at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
	at org.gradle.util.Swapper.swap(Swapper.java:38)
	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDebugManifest'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:95)
	at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:91)
	at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:119)
	at org.gradle.api.internal.tasks.execution.ResolvePreviousStateExecuter.execute(ResolvePreviousStateExecuter.java:43)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:93)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:45)
	at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:94)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:67)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:49)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:315)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:305)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:101)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:49)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:43)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:355)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:343)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:336)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:322)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:134)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker$1.execute(DefaultPlanExecutor.java:129)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:202)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:129)
	... 3 more
Caused by: java.lang.RuntimeException: Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
	is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
	Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:8:5-29:19 to override.
	at com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.java:558)
	at com.android.build.gradle.tasks.ProcessApplicationManifest.doFullTaskAction(ProcessApplicationManifest.java:208)
	at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:106)
	at jdk.internal.reflect.GeneratedMethodAccessor161.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
	at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:47)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:41)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:28)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:284)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)
	at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:273)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:258)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$200(ExecuteActionsTaskExecuter.java:67)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:145)
	at org.gradle.internal.execution.impl.steps.ExecuteStep.execute(ExecuteStep.java:49)
	at org.gradle.internal.execution.impl.steps.CancelExecutionStep.execute(CancelExecutionStep.java:34)
	at org.gradle.internal.execution.impl.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:69)
	at org.gradle.internal.execution.impl.steps.TimeoutStep.execute(TimeoutStep.java:49)
	at org.gradle.internal.execution.impl.steps.CatchExceptionStep.execute(CatchExceptionStep.java:33)
	at org.gradle.internal.execution.impl.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50)
	at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:43)
	at org.gradle.internal.execution.impl.steps.SnapshotOutputStep.execute(SnapshotOutputStep.java:29)
	at org.gradle.internal.execution.impl.steps.CacheStep.executeWithoutCache(CacheStep.java:134)
	at org.gradle.internal.execution.impl.steps.CacheStep.lambda$execute$3(CacheStep.java:83)
	at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:82)
	at org.gradle.internal.execution.impl.steps.CacheStep.execute(CacheStep.java:36)
	at org.gradle.internal.execution.impl.steps.PrepareCachingStep.execute(PrepareCachingStep.java:33)
	at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:38)
	at org.gradle.internal.execution.impl.steps.StoreSnapshotsStep.execute(StoreSnapshotsStep.java:23)
	at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:96)
	at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:89)
	at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
	at org.gradle.internal.execution.impl.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
	at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:34)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:91)
	... 32 more

and I'm using appcompat support library 28.0.0
is it a problem due to not using androidx?

Add xml attrs file to the aar package

Hi! Just tried your library today and it works wonderfully! Thank you very much for releasing it.

But when I tried to use some attributes, Android Studio complained that it couldn't find them. After inspecting the aar file, I noticed that the attrs.xml file is missing inside the res folder.

Add support to clickListener

I'd like to handle clicks on the imageview, but when I call setOnClickListener, the listener isn't called.

I think onTouchEvent needs to be patched to detect when a click was done and call the performClick method accordingly.

Thanks for all the hard work!

View gets locked when changing layout params

Hi, I'm trying to make that a ZoomageView gets "fullscreen" when you double touch it, instead of simply zooming.

To make that, I've created a custom GestureDetector, this code:

class GestureListener(private val mainActivity: MainActivity) :
    GestureDetector.SimpleOnGestureListener() {
    companion object {
        private const val TAG = "GestureListener"
    }

    private var zoomed = false

    override fun onDoubleTap(e: MotionEvent?): Boolean {
        super.onDoubleTap(e)

        val displayMetrics = DisplayMetrics()
        mainActivity.windowManager.defaultDisplay.getMetrics(displayMetrics)
        val screenHeight = displayMetrics.heightPixels
        val imageViewParams = mainActivity.imageView.layoutParams
        imageViewParams.height = screenHeight * 1 / 2
        mainActivity.imageView.layoutParams = if (zoomed) imageViewParams
            else ConstraintLayout.LayoutParams(
                ConstraintLayout.LayoutParams.MATCH_PARENT,
                ConstraintLayout.LayoutParams.MATCH_PARENT
            )
        zoomed = !zoomed

        mainActivity.imageView.invalidate()

        return true
    }
}

What I'm trying to do there is to set the imageView's height to half the screen height, and when you double click, it fills the parent view.
The thing is that some times (mostly always) when the view changes size it gets blocked, I can't zoom in, out or move the image, and I have to close and reopen the app, to see the same behavior again.
I'm not getting any errors, so I am a bit confused.
I've tried doing it the ugly way, creating two imageView, and when double clicking one hiding that, and showing the other, see this code:

class GestureListener(private val mainActivity: MainActivity) :
    GestureDetector.SimpleOnGestureListener() {
    companion object {
        private const val TAG = "GestureListener"
    }

    private var zoomed = false

    override fun onDoubleTap(e: MotionEvent?): Boolean {
        super.onDoubleTap(e)

        visibility(mainActivity.sector_imageView, !zoomed)
        visibility(mainActivity.imageView_full, zoomed)

        zoomed = !zoomed

        mainActivity.imageView.invalidate()
        mainActivity.imageView_full.invalidate()

        return true
    }
}

Where visibility is:

fun visibility(view: View, visible: Boolean, setGone : Boolean = true, debug: Boolean = false){
    view.visibility = if(visible) View.VISIBLE else if(setGone) View.GONE else View.INVISIBLE
}

But I am having the same issue. Locked view, no errors... What am I doing wrong? Thanks in advance.

No method to retain zoom level

Hi! I need to retain the zoom level when drawable changes in the view. Currently when I show thumbnail in the ImageView and zoom the image then when Glide loads the actual image. The zoom state is reset, I need to retain it in that case.
Currently I've handled it like this:

    @Override
    public void setScaleType(@Nullable ScaleType scaleType) {
        // To retain zoom level on Drawable change i.e. when actual image loads after thumbnail
        if (!isZoomed()) {
            super.setScaleType(scaleType);
        }
    }

Get position touched by user

I need to show a map who will receive user interactions to point some events in my app. There is a way to get the right position (x/y) when the image is zoomed? I found a similar question where you say to use Matrix to do that, but I don't know how to do it.

Status Code 409 Conflict

Hey Jeff,
I've used zoomage in my Android applications before with no error, but I'm getting an error now. See notes below. Hope you can help.

When loading an Android application with the zoomage dependencies, I get the following gradle error:

Error:Could not GET 'https://oss.jfrog.org/artifactory/oss-snapshot-local/com/android/support/appcompat-v7/25.3.1/appcompat-v7-25.3.1.pom'. Received status code 409 from server: Conflict
Enable Gradle 'offline mode' and sync project

When I go to the site in the error message (https://oss.jfrog.org/artifactory/oss-snapshot-local/com/android/support/appcompat-v7/25.3.1/appcompat-v7-25.3.1.pom), I see:
{ "errors": [ { "status": 409, "message": "The repository 'oss-snapshot-local' rejected the resolution of an artifact 'oss-snapshot-local:com/android/support/appcompat-v7/25.3.1/appcompat-v7-25.3.1.pom' due to conflict in the snapshot release handling policy." } ] }

Any idea what's going on?

Thanks

Add support for rotation

Since we have translation and scale, we may as well get crazy and add an option for rotation as well. Rotation would require twisting two fingers past a threshold, optionally resetting after, same as translation and scale.

Zoom factor

How can i get zoom factor?
ex. zoomed (2x), zoomed (1.63x)

Edit:
and also how can i get x and y coordinates of displayed part of ZoomageView after i zoom in?

Single tap is also causing image to zoom

I open image in a separate activity and zoom works fine for the first time. But when I open this activity again, it zooms on a single click (To the maximum zoom) which is undesirable. Can you please check this issue.

Thanks in advance!

Undesirable zoom when entering page with ViewPager2

I have such a problem - when scrolling with view pager some of the pages are auto zoomed a little and after a second they revert to original size. This seems to not occur when scale type of an imageView is set to Matrix, but not confirmed. I have a default configuration in code, nothing custom. Additionally autoReset seems to not work everytime i lose interaction with image.

app:zoomage_autoResetMode="ALWAYS"
app:zoomage_restrictBounds="true"
app:zoomage_animateOnReset="true"
app:zoomage_autoCenter="false"
app:zoomage_translatable="false"
app:zoomage_zoomable="false"
app:zoomage_minScale="1"
app:zoomage_maxScale="5"
app:zoomage_doubleTapToZoom="false"

Could not find library

When I'm trying to download using gradle snapshot library I'm getting following errors on android studio 3.0.0

Error:Could not find com.jsibbold:zoomage:1.2.0-SNAPSHOT.
Searched in the following locations:
file:/E:/Android/sdk/extras/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
file:/E:/Android/sdk/extras/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
file:/E:/Android/sdk/extras/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
file:/E:/Android/sdk/extras/google/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
file:/E:/Android/sdk/extras/google/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
file:/E:/Android/sdk/extras/google/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
file:/E:/Android/sdk/extras/android/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
file:/E:/Android/sdk/extras/android/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
file:/E:/Android/sdk/extras/android/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
file:/F:/android-studio-ide-171.4182969-windows/android-studio/gradle/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
file:/F:/android-studio-ide-171.4182969-windows/android-studio/gradle/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
file:/F:/android-studio-ide-171.4182969-windows/android-studio/gradle/m2repository/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
http://mobile.useinsider.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
http://mobile.useinsider.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
http://mobile.useinsider.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://jcenter.bintray.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://jcenter.bintray.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://jcenter.bintray.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://repo1.maven.org/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://repo1.maven.org/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://repo1.maven.org/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://raw.github.com/Matthias247/jawampa/mvn-repo/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://raw.github.com/Matthias247/jawampa/mvn-repo/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://raw.github.com/Matthias247/jawampa/mvn-repo/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://jitpack.io/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://jitpack.io/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://jitpack.io/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://dl.google.com/dl/android/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://dl.google.com/dl/android/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://dl.google.com/dl/android/maven2/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://maven.fabric.io/public/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://maven.fabric.io/public/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://maven.fabric.io/public/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
https://s3.amazonaws.com/repo.commonsware.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/maven-metadata.xml
https://s3.amazonaws.com/repo.commonsware.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.pom
https://s3.amazonaws.com/repo.commonsware.com/com/jsibbold/zoomage/1.2.0-SNAPSHOT/zoomage-1.2.0-SNAPSHOT.jar
Required by:
project :app

Error inflating class com.jsibbold.zoomage.ZoomageView

Device: Moto G4, API level 23

android.view.InflateException: Binary XML file line #189: Binary XML file line #189: Error inflating class com.jsibbold.zoomage.ZoomageView
FATAL EXCEPTION: Thread-761
Process: com.mediums, PID: 12093
android.view.InflateException: Binary XML file line #189: Binary XML file line #189: Error inflating class com.jsibbold.zoomage.ZoomageView
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at com.mediums.ui.fragments.PhotoReadingFragment.onCreateView(PhotoReadingFragment.java:61)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execSingleAction(FragmentManagerImpl.java:1696)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:299)
at com.mediums.ui.activity.DashboardActivity.loadFragment(DashboardActivity.java:130)
at com.mediums.adapter.BottomNavigationAdapter.onBindViewHolder(BottomNavigationAdapter.java:43)
at com.mediums.adapter.BottomNavigationAdapter.onBindViewHolder(BottomNavigationAdapter.java:19)
at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:561)
at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3851)
at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4404)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5440)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5440)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5440)
at androidx.appcompat.widget.LinearLayoutCompat.setChildFrame(LinearLayoutCompat.java:1655)
at androidx.appcompat.widget.LinearLayoutCompat.layoutVertical(LinearLayoutCompat.java:1509)
at androidx.appcompat.widget.LinearLayoutCompat.onLayout(LinearLayoutCompat.java:1417)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewGroup.java:5440)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336)
at android.widget.FrameLayout.onLayout(FrameLayout.java:273)
at android.view.View.layout(View.java:16651)
at android.view.ViewGroup.layout(ViewG

About nested recycleview

Hi. I have a viewpager2 in recycleview just like instagram. I want to show a picture just like instagram pinch zoom. it is work in viewpager's borders when I use Zoomage in viewpager but it is not overflow of viewpager borders. it is mean it can not be fullscreen. is there any way to do full screen in Recycleview?

Wrong value of view getWidth and getHeight

I am using your library for zooming view.
When I get width value and height value using getWidth and a getHeight method respectively.
But, It gives me the wrong value.

I want width value and height value for making bitmap.
After I append some value it is working well. Show below Ex.

For Example.

zoomage.getWidth() is wrong value.
(int) (zoomage(zoomage.getWidth() * 1.010)) is right value.

zoomage.getHeight() is wrong value.
(int) zoomage(zoomage.getHeight() * 1.010) is right value.

I also tried with Default ImageView and It gives the right value.

Add Double Tab Listner

I want to customize double tab listener to move to next image , But not able to do as listener is observed.

Unable to Scroll in Sanpping RecyclerView

Emulator OS Android 10.

Unable to scroll through a snapping RecyclerView.

item_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:foreground="@drawable/ripple_effect"
    android:clickable="true"
    android:focusable="true">

    <com.jsibbold.zoomage.ZoomageView

        android:id="@+id/movieDetailsScreenshotImageView"

        android:layout_width="match_parent"
        android:layout_height="match_parent"

        app:zoomage_restrictBounds="true"

        android:contentDescription="@string/dummyImageDescription"

        tools:src="@drawable/temp_movie_screenshot"
        />

</FrameLayout>

fragment_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/screenshotsRecyclerView"

    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:overScrollMode="never"
    android:background="@color/screen_shots_background_color"
    >

</androidx.recyclerview.widget.RecyclerView>

and finally setting up a snaphelper in the fragment:

snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(screenshotsRecyclerView);

While the image is zoomable, user is unable to scroll through the list.

How to connect Zoomage with Seekbar

I am really really stuck at this point

@Override
public void onRangeChanged(RangeSeekBar view, float leftValue, float rightValue, boolean 
isFromUser) {

    **_//What should i do here_**

}

@Override
public void onStartTrackingTouch(RangeSeekBar view, boolean isLeft) {

}

@Override
public void onStopTrackingTouch(RangeSeekBar view, boolean isLeft) {

}

Location of Drawable

Is there a way to get the position of the drawable displayed by the ZoomageView?
I'd like to be able to programmatically access the current size and current position of the drawable.

Image bounds are not restricted when zooming.

I have a ZoomageView with zoomage_restrictBounds set to true, and when dragging with a finger, this is perfect, but when you drag with two fingers, when zooming, for example, it allows you to exit the boundaries.
Is it a bug, a feature or I do need to set up something else?
Thank you very much.

Add support for double-tap to zoom

Great library, thanks !
Would be nice if it allowed to zoom-in/zoom-out of the image by double-tapping on it.

Double-tapping would toggle-animate between the full-screen state and the original image size, which seems to be the standard behavior of most image-viewing widgets.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.