• Stars
    star
    318
  • Rank 131,872 (Top 3 %)
  • Language
    Java
  • Created about 9 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

ImageBrowseFragment like WeChat moments image transition on Lollipop..

ImageBrowse fragment can use to browse image with transition animation

The same as the latest android WeChat moments image browse effect

Android Arsenal

FINAL EFFECT

EFFECT

Feature: Big improvement

Add thumbnail support when full image is not cache just like WeChat does.

New add padding and margin support in ImageBrowseFragment

1.original view: just like normal imageView but with zoom effect
2.detail view:
① single click back to pre layout with shrink effect
② double click to zoom effect(*2.5)
③ more gesture see details code
3.if u have more than one imageview can display with ViewPager
random click original imageview,and scroll ViewPager to any position,
than u press back key,or single click detail,u will see original view's
position is the same as ViewPager‘s current position.

4.load image from remote u can't click item until it finished

5.ViewPager has rebound effect when edge of ViewPager is available..

#USAGE for fragment

1.Handle init PhotoView(also available xml)

    PhotoView p = new PhotoView(MainActivity.this);
    p.setLayoutParams(new AbsListView.LayoutParams((int) (getResources().getDisplayMetrics().density * 100), (int) (getResources().getDisplayMetrics().density * 100)));
    p.setScaleType(ImageView.ScaleType.CENTER_CROP);
    p.setEnabled(false);//u can't click view until image load completed
    ...//load image and put it into PhotoView
    p.disenable(false);//disable touch

2.Handle PhotoView Click

    //view is PhotoView normally,when load image from remote,you need call view.enable() to
    //let PhotoView can't be clicked util it load completed
    if(view.isEnabled()) { 
    Bundle bundle = new Bundle();
    bundle.putStringArrayList("imgs", imgList);//all PhotoView url(remote)
    bundle.putParcelable("info", ((PhotoView) view).getInfo());//click PhotoView ImageInfo
    bundle.putInt("position", position);//click position
    imgImageInfos.clear();
    //NOTE:if imgList.size >= the visible count in single screen,i will cause NullPointException
    //because item out of screen have been replaced/reused
    for (int i = 0; i < imgList.size(); i++) {
        imgImageInfos.add(((PhotoView) parent.getChildAt(i)).getInfo());//remember all PhotoView ImageInfo
    }
    bundle.putParcelableArrayList("infos", imgImageInfos);
    //attach fragment to Window
    getSupportFragmentManager().beginTransaction().replace(Window.ID_ANDROID_CONTENT, ImageBrowseFragment.getInstance(bundle), "ViewPagerFragment")
                                .addToBackStack(null).commit();
    }

More detail please see demo code.

#USEAGE for Dialog fragment

handle where you click

    root.post(new Runnable() { // in case root view not inflate complete
                         @Override
                         public void run() {
                             Bundle bundle = new Bundle();
                             bundle.putStringArrayList(ImageInfo.INTENT_IMAGE_URLS, imgList);
                             final ImageInfo preImgInfo = ((PhotoView) view).getInfo();
                             bundle.putParcelable(ImageInfo.INTENT_CLICK_IMAGE_INFO, preImgInfo);
                             bundle.putInt(ImageInfo.INTENT_CLICK_IMAGE_POSITION, position);
                             imgImageInfos.clear();
                             for (int i = 0; i < imgList.size(); i++) {
                                 imgImageInfos.add(((PhotoView) parent.getChildAt(i)).getInfo());
                             }
                             bundle.putParcelableArrayList(ImageInfo.INTENT_IMAGE_INFOS, imgImageInfos);
                             int[] position = new int[2];
                             root.getLocationOnScreen(position);
                             //Must correct the ImageInfo in DialogFragment
                             preImgInfo.correct(position, getStatusBarHeight());
                             for (ImageInfo item : imgImageInfos) {
                                 item.correct(position,getStatusBarHeight());
                             }
                             ImageBrowseDialogFragment.newInstance(bundle).show(getSupportFragmentManager(), ImageBrowseDialogFragment.class.getSimpleName());
                         }
                     });

See ImageBrowseDialogFragment If the anchor activity is fullscreen,we need care about if ImageBrowseDialogFragment is fullscreen

    @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          /**NOTE if the anchor activity is FullScreen,the following code must be used.
          and {@link ImageInfo#correct(int[], int)} the second params must be Zero..
          */
  //      getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
          getDialog().getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
      }

#NOTE if you use ReboundViewPager to get rebound effect,this way may cause a problem when doing scale operation at first or last PhotoView try use ViewPager instead

#THANKS PhotoView from https://github.com/bm-x/PhotoView

Custom Activity Animations from https://www.youtube.com/watch?v=CPxkoe2MraA

License

Copyright 2015-2016 Bruce too

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.

See LICENSE file for details.

More Repositories

1

PickView

Date and Province WheelView like IOS
Java
1,101
star
2

PinterestView

Pinterest like awesome menu control for Android
Java
419
star
3

ListVideoPlay

Play video in ListView,RecyclerView,and support full-screen,and more feature about video play control
Java
306
star
4

VideoControllerView

Custom media controller view https://github.com/brucetoo/VideoControllerView
Java
244
star
5

ComboView

A view of clicking effect by combo action
Java
201
star
6

GradientTabStrip

See branch demo-text....Change from PagerSlidingTabStrip.Scroll to make tab text gradient
Java
80
star
7

Yingke

映客直播间IOS布局设计的一种实现方式demo
Java
45
star
8

Animation-with-fragment

idea from custom-animations-with-fragments and Code refrence from https://git.mika-dev.com/Mika/custom-animations-with-fragment I add click listener in "editmode",and handle bugs when Double clicking sticky item
Java
19
star
9

DrawerView

Detect how to use ViewDragHelper to custom ViewGroup
Java
11
star
10

AutoSwipeRefesh

A demo how to implement auto refresh using SwipeRefreshLayout
Java
10
star
11

Android-ObservableScrollView

from https://github.com/ksoichiro/Android-ObservableScrollView 主要是对FlexibleSpaceWithImageListViewActivity分析加上了注释
Java
7
star
12

MaterilaNewsApp

a news app with material design
Java
6
star
13

ExpandRecyclerView

Java
4
star
14

JNItest

Android Studio下NDK使用的例子,以及生成SO的方法
Java
4
star
15

PlantVsZombies

cocos2d-android版本应用
Java
3
star
16

ExpandableRecyclerAdaper

Make RecyclerView has Header and Footer easily!!!
Java
2
star
17

Side-Menu

from http://yalantis.com/
Java
2
star
18

DrawCircleProgress

something in CircleProgress onDraw() method about canvas.save,and canvas.restore() I dont realize
Java
2
star
19

Spotlight

idea from http://www.curious-creature.com/2012/12/13/android-recipe-2-fun-with-shaders/ i change something to make activity transition smooth, just create a bitmap about targetView's snap,reveal background when activity transition So lazy, no GIF
Java
2
star
20

Cocos2D-Game

简单cocos2D-android的入门demo
Java
1
star
21

UpdataFile

android 上传文件, Tomcat Servlet 接收文件,并读取文件
Java
1
star
22

ChatUI

IM Chat UI
C
1
star
23

Material-Whole

Material everywhere use some 3rd library
HTML
1
star
24

AndroidTools

It's a plugin not only contains Adb command...
Java
1
star
25

Materia-Design

大神的代码,研究中
Java
1
star
26

WifiTransport

Wifi transform and p2p
Java
1
star
27

ScrollToHide

Scroll to hide toolBar and FAB
Java
1
star
28

weex-demo

weex demo working...
Vue
1
star