2016-07-23 11 views
1

Ich habe eine Recycler-Ansicht in einem Fragment, das ein Bild enthält. Ich implementiere OnImageCLickListener, dass nach dem Klick auf Bild, ein Vollbild-Dialog-Fragment öffnet und zeigt das Bild. Jetzt möchte ich den Übergang von gemeinsam genutzten Elementen zwischen meinem Bild in der Recycler-Ansicht und dem Vollbilddialog meines Bildes im Dialogfragment implementieren. Außerdem möchte ich die Unterstützung für gemeinsame Elemente vor Lollipop.Wie zu implementieren Fragment geteiltem Element für Pre Lollipop?

Wie kann ich es tun?

Antwort

1

Zunächst müssen Sie die genaue Position des geklickt Imageview erhalten gibt sie an das Fragment: Position bekommen Sie diese verwenden können:

int[] location = {0,0}; 
mImageView.getLocationOnScreen(location); 

und es zu einem Fragment übergeben Sie diese verwenden können:

Bundle bundle = new Bundle(); 
bundle.putInt("locationX",location[0]); 
bundle.putInt("locationY",location[1]); 

und es in Ihrem Fragment durch diese:

locationX = getArguments().getInt("locationX"); 
locationY = getArguments().getInt("locationY"); 

Hinweis: Um diese Position zu erhalten, benutzen Sie keine Methoden wie view.getTop(), view.getRight(), etc. Jetzt müssen Sie eine einfache Animation wie dies in Ihrem Fragment OnCreateView:

float factor = ((float) (Utils.getWidth(getActivity()))/((float) (pictureWidth))); 

    viewPager.getLayoutParams().height = pictureHeight; 
    viewPager.getLayoutParams().width = pictureWidth; 
    viewPager.setTranslationY(locationY); 
    viewPager.setTranslationX(locationX); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) { 
     viewPager.animate() 
       .translationY(Utils.getHeight(getActivity())/2 - pictureHeight/2) 
       .scaleX(factor) 
       .scaleY(factor) 
       .translationX(Utils.getWidth(getActivity())/2 - pictureWidth/2);} 

Es unterstützt auch zu Pre-Lollipop.