Giter VIP home page Giter VIP logo

frescoimageviewer's Introduction

This project is no longer supported. If you're able to switch from Fresco to any other library that works with the Android's ImageView, please migrate to the StfalconImageViewer which is a better version of the FrescoImageViewer. Otherwise, you can still use the latest version of this library. Anyway, PRs are welcome!

FrescoImageViewer

codebeat badge Download

Simple customizable full screen image viewer for Fresco library that includes "pinch to zoom" and "swipe to dismiss" gestures. Based on PhotoDraweeView by ongakuer.

alt tag

Who we are

Need iOS and Android apps, MVP development or prototyping? Contact us via [email protected]. We develop software since 2009, and we're known experts in this field. Check out our portfolio and see more libraries from stfalcon-studio.

Requirements

  • Fresco v.0.12.0 and higher
  • SDK 14 and and higher

Demo Application

Get it on Google Play

Usage

Simple usage

All you need to show a viewer is pass the context, start position and List or String[] into builder and call show().

new ImageViewer.Builder(context, list)
        .setStartPosition(startPosition)
        .show();

Custom objects

But what if in your application images are represented not only with urls? For example, you have object with url and description? You'll have to convert it to list of Strings and only then pass it to viewer, right? No, it's unnecessary! With ImageViewer.Formatter you can pass list of your custom images to viewer and simply write a rule for url extracting:

List<CustomImage> images = getImages();
new ImageViewer.Builder<>(this, images)
        .setFormatter(new ImageViewer.Formatter<CustomImage>() {
            @Override
            public String format(CustomImage customImage) {
                return customImage.getUrl();
            }
        })
        .show();

If formatter isn't passed, Object.toString() will be used for image formatting as default behavior.

Piece of cake! 🍰 😉

Reminder

Don't forget to initialize Fresco in your Application class:

Fresco.initialize(this);

And if you expect to open really large images, use configuration below for better performance:

ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
    .setProgressiveJpegConfig(new SimpleProgressiveJpegConfig())
    .setResizeAndRotateEnabledForNetwork(true)
    .setDownsampleEnabled(true)
    .build();
Fresco.initialize(this, config);

Customizing

You can also customize a viewer to fit your needs.

Background

Use setBackgroundColorRes(colorRes) or setBackgroundColor(colorInt) to set color for fading background.

Custom overlay view

If you need some content over the image (e.g. sharing or download button, description, numeration etc.) you can set your custom view using setOverlayView(customView) and bind it with viewer through ImageViewer.OnImageChangeListener.

Custom drawee hierarchy

Of course, according to Fresco flexibility, you can use your custom GenericDraweeHierarchy. To do this you simply need to create GenericDraweeHierarchyBuilder and pass it into builder:

GenericDraweeHierarchyBuilder hierarchyBuilder = GenericDraweeHierarchyBuilder.newInstance(getResources())
        .setFailureImage(R.drawable.failureDrawable)
        .setProgressBarImage(R.drawable.progressBarDrawable)
        .setPlaceholderImage(R.drawable.placeholderDrawable);

builder.setCustomDraweeHierarchyBuilder(hierarchyBuilder)

But there is a limitation: default ScaleType in hierarchy is ScaleType.FIT_CENTER, so custom value will be ignored

Custom image requests

For rare cases like post-processing or bitmap resizing you need to use your custom ImageRequestBuilder. Create it with ImageViewer.createImageRequestBuilder() and after configuration pass it to viewer through setCustomImageRequestBuilder(ImageRequestBuilder).

builder.setCustomImageRequestBuilder(
            ImageViewer.createImageRequestBuilder()
                    .setPostprocessor(new GrayscalePostprocessor()));

Image margin

Simply add margins between images with dimens with setImageMargin(context, dimen) or in px using setImageMarginPx(marginPx).

Container padding

Overlay image hides part of image? Set container padding with dimens using setContainerPadding(context, start, top, end, bottom) or setContainerPadding(context, dimean) for all sides at once. For setting padding in pixels, just use setContainerPaddingPx(...) method.

Status bar visibility

To show/hide status bar in view property you can set hideStatusBar(boolean) in builder. The default value is true.

Gestures disabling

If you need to disable some of gestures - do it using allowSwipeToDismiss(boolean) and allowZooming(boolean) accordingly.

Here is an example that sets all the possible options:

new ImageViewer.Builder<>(this, images)
        .setStartPosition(startPosition)
        .hideStatusBar(false)
        .allowZooming(true)
        .allowSwipeToDismiss(true)
        .setBackgroundColorRes(colorRes)
        //.setBackgroundColor(color)
        .setImageMargin(margin)
        //.setImageMarginPx(marginPx)
        .setContainerPadding(this, dimen)
        //.setContainerPadding(this, dimenStart, dimenTop, dimenEnd, dimenBottom)
        //.setContainerPaddingPx(padding)
        //.setContainerPaddingPx(start, top, end, bottom)
        .setCustomImageRequestBuilder(imageRequestBuilder)
        .setCustomDraweeHierarchyBuilder(draweeHierarchyBuilder)
        .setImageChangeListener(imageChangeListener)
        .setOnDismissListener(onDismissListener)
        .setOverlayView(overlayView)
        .show();

With this possibilities you can achieve something like this:

alt tag

You can take a look at sample project for more information.

Install

Download via Gradle:

compile 'com.github.stfalcon:frescoimageviewer:0.5.0'

or Maven:

<dependency>
  <groupId>com.github.stfalcon</groupId>
  <artifactId>frescoimageviewer</artifactId>
  <version>0.5.0</version>
  <type>pom</type>
</dependency>

Changelog

See the changelog to be aware of latest improvements and fixes.

License

Copyright (C) 2017 stfalcon.com

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

frescoimageviewer's People

Contributors

alexz89ua avatar troy379 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  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

frescoimageviewer's Issues

Style and customization

Hi!

  1. Can I change fullscreen mode to false?
  2. How set close dialog with button in overlayView?

Callback Method Needed

Uh oh, this problem is not fun. It appears that this library lacks a callback method from the ImageOverlayView. What this means is that creating a "Delete" button or any image overlay that requires communication with the main ImageViewerActivity is not supported.
Maybe PR #27 fixes this?

Looking into this problem more...

Placeholder customisation

The library is really good but I was wondering if this is possible to specify a custom drawable as a placeholder ? Or even a loading spinner animation ?

Incorrect isScaled due to rounding error

Steps to reproduce:

  1. Zoom the image
  2. Tap back to reset zoom to 1.0
  3. Tap back again has no response
  4. Tap back again to actually go back

What is expected:

  1. Zoom the image
  2. Tap back to reset zoom to 1.0
  3. Tap back again to go back

Cause:
The zoom factor comparison, isScaled = drawee.getScale() > 1.0f, is broken due to rounding error. On the devices that I've tested, drawee.getScale() can be as large as 1.025 after calling ImageViewHolder.resetScale().
809b1d2#diff-e96d3637344c046617a02de7e50fd319R117

Solution:
Use proper float number comparison logic. E.g. isScaled = Math.abs(drawee.getScale() - 1.0f) > MIN_SCALE_DELTA.

Public classes

Could you make a class ImageViewerView and other classes public?
For the possibility add to its activity.

Thank you.

event dialog cancel?

when i press keyboard back in device, dialog not run dismiss(), it just run cancel() ==> not call listener dismiss. Can you fix it? thank you!

java.lang.StackOverflowError: stack size 8MB

This error is reported by Crashlytics, I don't have compatible device to test myself. Affected devices are ASUS_Z00LDD and S5J+. Stacktrace:

Fatal Exception: java.lang.StackOverflowError: stack size 8MB
	   at java.lang.reflect.Method.invoke(Method.java)
	   at android.util.BoostFramework.perfLockAcquire(BoostFramework.java:126)
	   at android.view.View.dispatchTouchEvent(View.java:9308)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2548)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2241)
	   at com.stfalcon.frescoimageviewer.MultiTouchViewPager.dispatchTouchEvent(SourceFile:56)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onActionDown(SourceFile:1219)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.onClick(SourceFile:4231)
	   at com.stfalcon.frescoimageviewer.ImageViewerView$2.onSingleTapConfirmed(SourceFile:125)
	   at android.view.GestureDetector.onTouchEvent(GestureDetector.java:637)
	   at android.support.v4.view.GestureDetectorCompat$GestureDetectorCompatImplJellybeanMr2.onTouchEvent(SourceFile:479)
	   at android.support.v4.view.GestureDetectorCompat.onTouchEvent(SourceFile:542)
	   at com.stfalcon.frescoimageviewer.ImageViewerView.dispatchTouchEvent(SourceFile:146)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2554)
	   at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2255)
	   at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
	   at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
	   at android.app.Dialog.dispatchTouchEvent(Dialog.java:787)
	   at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(SourceFile:67)
	   at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
	   at android.view.View.dispatchPointerEvent(View.java:9553)
	   at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4248)
	   at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4101)
	   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3647)
	   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3700)
	   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3666)
	   at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3792)
	   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3674)
	   at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3849)
	   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3647)
	   at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3700)
	   at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3666)
	   at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3674)
	   at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3647)
	   at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5944)
	   at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5918)
	   at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5879)
	   at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6047)
	   at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
	   at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
	   at android.os.MessageQueue.next(MessageQueue.java:323)
	   at android.os.Looper.loop(Looper.java:135)
	   at android.app.ActivityThread.main(ActivityThread.java:5451)
	   at java.lang.reflect.Method.invoke(Method.java)
	   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
	   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

How to disable swipe to dismiss ?

I am trying to use this FrescoImageViewer on my activity but I want to stop using this swipe to dismiss.
How can I achieve this ?

Sample APK?

Can you provide a sample apk? Maybe it is already there but I cannot find one...

Landscape problem

Hi thanks for this wonderful library.
I have an issue with Screen orientation. How to add Landscape orientation in the library for the view pager

Small lags when flipping

HI, Alexander!
I have a small problem:
When viewing a large number of images(15 urls), I have a lags when flippin photo.

Init fresco:

    public void setupFresco() {
        ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        ImagePipelineConfig imagePipelineConfig = ImagePipelineConfig
                .newBuilder(getApplicationContext())
                .setBitmapMemoryCacheParamsSupplier(new FrescoMemoryCashHelper(activityManager))
                .build();
        Fresco.initialize(this, imagePipelineConfig);
//        ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)
//                .setProgressiveJpegConfig(new SimpleProgressiveJpegConfig())//out of memory if Iuse this
//                .setResizeAndRotateEnabledForNetwork(true) //out of memory if  use this
//                .build();
    }

ImageViewer:

            LayoutInflater layoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View closeView = layoutInflater.inflate(R.layout.item_photo_gallery, null);
            ImageView ivClose = (ImageView)  closeView.findViewById(R.id.ivClose);
            final ImageViewer viewer = new ImageViewer.Builder(getContext(), photos)
                    .setOverlayView(closeView)
                    .setStartPosition(position)
//                    .setImageMarginPx(10)
                    .hideStatusBar(false)
                    .build();
            viewer.show();
            ivClose.setOnClickListener(view1 -> viewer.onDismiss());
        }

java.lang.NullPointerException: SimpleDraweeView was not initialized!

Hi,I just copy your source code into my project and did not modify any logical code.

in fragment :

                new ImageViewer.Builder(activity, activity.imageUrls)
                        .setStartPosition(0)
                        .setImageMargin(activity, R.dimen.image_margin)
                        .setOnDismissListener(activity.getDisissListener())
                        .setImageChangeListener(activity.getImageChangeListener())
                        .setCustomDraweeHierarchyBuilder(activity.getHierarchyBuilder())
                        .setOverlayView(activity.overlayView)
                        .show(); // Error in here.

E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException: SimpleDraweeView was not initialized!
at com.facebook.common.internal.Preconditions.checkNotNull(Preconditions.java:226)
at com.facebook.drawee.view.SimpleDraweeView.init(SimpleDraweeView.java:81)
at com.facebook.drawee.view.SimpleDraweeView.(SimpleDraweeView.java:58)
at com.frescoimageviewer.drawee.ZoomableDraweeView.(ZoomableDraweeView.java:31)
at com.frescoimageviewer.ImageViewerAdapter.getDrawee(ImageViewerAdapter.java:104)
at com.frescoimageviewer.ImageViewerAdapter.generateDrawees(ImageViewerAdapter.java:99)
at com.frescoimageviewer.ImageViewerAdapter.(ImageViewerAdapter.java:52)
at com.frescoimageviewer.ImageViewerView.setUrls(ImageViewerView.java:59)
at com.frescoimageviewer.ImageViewer.createDialog(ImageViewer.java:49)
at com.frescoimageviewer.ImageViewer.(ImageViewer.java:32)
at com.frescoimageviewer.ImageViewer$Builder.build(ImageViewer.java:257)
at com.frescoimageviewer.ImageViewer$Builder.show(ImageViewer.java:265)
at com.kgv.cookbook.fragment.recipedetail.FirstFragment.onClick(FirstFragment.java:73)

some improve suggestions about load local image

I found it can't load image from remote and local the same time, so i make some change:
In package Drawee: ImageViewerAdapter.java:

    private ZoomableDraweeView getDrawee(String url) {
      ZoomableDraweeView drawee = new ZoomableDraweeView(context);

      if (hierarchyBuilder != null) {
          hierarchyBuilder.setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
          drawee.setHierarchy(hierarchyBuilder.build());
      }

    PipelineDraweeControllerBuilder controllerBuilder = Fresco.newDraweeControllerBuilder();

    //     I add one line here : then it ok
    Uri uri = url.startsWith("http") ? Uri.parse(url) : Uri.fromFile(new File(url));
    
    controllerBuilder.setUri(uri);
    controllerBuilder.setOldController(drawee.getController());
    controllerBuilder.setControllerListener(getDraweeControllerListener(drawee));
    drawee.setController(controllerBuilder.build());

    return drawee;
    }

rotation

hi,
it shows images just in portrait mode. does it support rotation?

rotate the image

hello
i have a question.is it possible to rotate image with Touch or button?
because my activity seated to portrait orientation and i don't want my activity rotated automatically and i want just image rotating by click on button or Touch.
(sorry for my english)

Update data set

Is there any way to update images DataSet without recreating the Builder? I want to update images while ImageViewer is displaying.

[QUESTION] Remove images

Hello,

I would like to ask how can I implement remove [button] of actual showed photo from CustomDraweeHierarchyBuilder?

greetings

java.util.zip.ZipException: duplicate entry: bolts/AggregateException.class

Hi,
i got error when sign apk:
Error:Execution failed for task ':app:transformClassesWithJarMergingForProductionRelease'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: bolts/AggregateException.class

If i build and run, it works just fine.
Here's my gradle dependencies:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'

    def supportVersion = '25.1.1'
    compile "com.android.support:appcompat-v7:$supportVersion"
    compile "com.android.support:recyclerview-v7:$supportVersion"
    compile "com.android.support:design:$supportVersion"
    compile "com.android.support:cardview-v7:$supportVersion" 

    compile ('com.facebook.android:facebook-android-sdk:4.1.0'){
        exclude group: 'com.parse.bolts',
                module: 'bolts-tasks'
        exclude group: 'com.parse.bolts',
                module: 'bolts-applinks';}

    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.crittercism:crittercism-android-agent:5.2.0'
    compile 'com.google.code.gson:gson:2.3.1'

    def playServicesVersion = '10.0.1'
    compile "com.google.android.gms:play-services-base:$playServicesVersion"
    compile "com.google.android.gms:play-services-location:$playServicesVersion"
    compile "com.google.android.gms:play-services-auth:$playServicesVersion"
    compile "com.google.android.gms:play-services-places:$playServicesVersion"
    compile "com.google.android.gms:play-services-maps:$playServicesVersion"
 
    compile "com.google.firebase:firebase-core:$playServicesVersion"
    compile "com.google.firebase:firebase-messaging:$playServicesVersion"
    compile "com.google.firebase:firebase-crash:$playServicesVersion"


    compile 'com.mikhaellopez:circularimageview:2.1.1'
    compile 'com.romandanylyk:pageindicatorview:0.1.1'
    compile 'commons-validator:commons-validator:1.5.1'
    compile 'com.github.stfalcon:frescoimageviewer:0.5.0' 
    compile('com.facebook.fresco:fresco:1.3.0'){
        exclude module: 'bolts-android'
    }
    compile 'com.android.support:multidex:1.0.0' 
}

Please help. thanks

Can't add Padding

Hello,
I'm trying to add multiple buttons below the image, but when i try to zoom the image, it cames -like- a background of the share buttons.
So is there any way to add a padding to the image, so it would zoom only in the green space ?

img

Thank you

can not scroll to another when image is scaled

Hi
thank for your repository,
neither swipe to dimiss nor scroll to another image when image is scaled, I have to reset scale first,
i think that is redundant. so how to change
sorry for my English.

java.lang.NoClassDefFoundError com.stfalcon.frescoimageviewer.drawee.ZoomableDraweeView

Im having this error when trying to build the imageviewer.

btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@OverRide
public void onClick(View view) {
String[] arr = new String[5];
arr[0] = "https://c.tadst.com/gfx/750w/doomsday-rule.jpg";
arr[1] = "https://upload.wikimedia.org/wikipedia/commons/2/2a/Keyboard-anykey.jpg";
arr[2] = "https://lh4.googleusercontent.com/YhW2CPU18gJHfmC-e_gaGgs5rPFEld__gXbA-p-CsxK4FcM8qgXjMNVJfATKkKV7UKEdp2497g=s640-h400-e365";
arr[3] = "https://ichef.bbci.co.uk/images/ic/480x270/p01lc1n2.jpg";
arr[4] = "http://static1.businessinsider.com/image/51817e9e6bb3f7601c000016/17-year-cicadas-will-overrun-the-east-coast-any-day-now.jpg";
new ImageViewer.Builder(MainActivity.this, arr)
.setStartPosition(1)
.show();
}
});

RecyclerView is computing a layout or scrolling

this library is too good but whenever i am implementing in recycle view i am facing this issue
RecyclerView is computing a layout or scrolling
i add image view just in layout file only no other any click event add in adapter so get this issue if i remove image view from layout xml file its work fine.
any solution for that ?

Video player

Is possible to use video and image in same viewer?

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.