2013-06-05 4 views
8

मैं वर्तमान में ViewPager में पृष्ठों को स्विच करने के बीच कस्टम एनीमेशन पर काम कर रहा हूं। जब मैं बाईं ओर स्लाइड करता हूं, तो दृश्य बाईं ओर बढ़ रहा है और इसके नीचे से नया दृश्य सामने आ रहा है।चुनौती: ViewPager का कस्टम एनीमेशन। चयनित तत्वों की ऊंचाई बदलें (गुना देखें)

enter image description hereenter image description hereenter image description here

दूसरे और तीसरे छवि मैं नए दृश्य चित्र नहीं था पर: मैं देखने के लिए, कि बाईं ओर ले जाता है (कि मैं निपटाने) folowing छवियों पर की तरह हटना करना चाहते हैं सामने आ रहा है, लेकिन मुझे लगता है कि यह जरूरी नहीं था। क्या आपको कोई विचार है कि मैं कोड को कैसे संशोधित कर सकता हूं?

मैं टेबललाउट, सापेक्ष लयआउट और फ़्रेमलाउट की ऊंचाई बदलना चाहता हूं और टेक्स्टव्यू दोनों की ऊंचाई रखना चाहता हूं। इसके अलावा मुझे पूरे दृश्य की एक्स-स्थिति बदलनी होगी।

मैं आपके रचनात्मक उत्तरों (कोड) के लिए तत्पर हूं। नीचे मैं एनीमेशन के लिए अपना कोड संलग्न करता हूं।

import android.view.View; 
import android.widget.RelativeLayout; 
import android.annotation.SuppressLint; 
import android.support.v4.view.ViewPager.PageTransformer; 

public class DepthPageTransformer implements PageTransformer { 
    private static float MIN_SCALE = 0.75f; 

    @SuppressLint("NewApi") 
    public void transformPage(View view, float position) { 
     int pageWidth = view.getWidth(); 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 0) { // [-1,0] 
      // Use the default slide transition when moving to the left page 
      view.setTranslationX(0); 
      view.setScaleX(1); 
      view.setScaleY(1); 
      //float scaleFactor = (1 - Math.abs(position)); 

      //WHAT TO PUT HERE TO ARCHIVE MY GOAL?? 

      //This is how I can get particular layouts: 
      // RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.fragment_object_canvas_RelativeLayout1); 
      //relativeLayout.setScaleX(scaleFactor); 
      //relativeLayout.setScaleY(scaleFactor); 

     } else if (position <= 1) { // (0,1] 
      // Fade the page out. 
      view.setAlpha(1 - position); 

      // Counteract the default slide transition 
      view.setTranslationX(pageWidth * -position); 
      //view.setRotation(1 - (position*360)); 

      // Scale the page down (between MIN_SCALE and 1) 
      float scaleFactor = MIN_SCALE 
        + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 

अद्यतन:

मैं निम्नलिखित कोड के साथ (अब के लिए मैं केवल यह कर सकते हैं) पूरे दृश्य की ऊंचाई के साथ हेरफेर कर सकते हैं:

LinearLayout relativeLayout = (LinearLayout) view.findViewById(R.id.fragment_object_canvas_linearLayout1); 
      relativeLayout.setLayoutParams(new FrameLayout.LayoutParams(relativeLayout.getWidth(), NEW_HEIGHT_HERE))); 

हालांकि, मैं नहीं यकीन है कि क्या करना चाहिए हूँ मैं इसे gectly काम करने के लिए NEW_HEIGHT_HERE चर डाल दिया ...

उत्तर

5

एक स्थिति फ्लोट चर के साथ काम करने का प्रयास करें। अपने लेआउट की ऊंचाई प्राप्त करें और ...:

relativeLayout.setLayoutParams(....,position*height+height) 
+0

मैं यह काम नहीं कर सकते हैं फोन करके अपने एनीमेशन का चयन कर सकते हैं। मुझे लगता है कि मुझे बदलना चाहिए: शीर्ष मार्जिन, नीचे मुख्य कंटेनर का मार्जिन और फिर टेक्स्ट व्यू के बीच कंटेनर की ऊंचाई। अगर कोई इसे हल करने में सक्षम है तो मैं कोड की प्रतीक्षा कर रहा हूं। – Marek

1

आप मूल कोड पोस्टिंग लोगों पर बहुत आग्रहपूर्ण लगते हैं, लेकिन क्यों पहिया बदलने? इस लाइब्रेरी में व्यूपेजर के लिए बहुत से महान एनिमेशन हैं, जिनमें से एक जैसा आप अनुरोध कर रहे हैं उसके समान ही है।

https://github.com/jfeinstein10/JazzyViewPager

JazzyViewPager - एक आसान ViewPager कि कस्टम स्वाइप एनिमेशन के एक भयानक सेट कहते हैं उपयोग करने के लिए। बस अपने ViewPagers को JazzyViewPagers में बदलें और आप जाने के लिए अच्छे हैं!


public enum TransitionEffect { 
     Standard, 
     Tablet, 
     CubeIn, 
     CubeOut, 
     Flip, 
     Stack, 
     ZoomIn, 
     ZoomOut, 
     RotateUp, 
     RotateDown, 
     Accordion 
    } 

आप

private JazzyViewPager mJazzy; 
/* ... */ 
mJazzy.setTransitionEffect(TransitionEffect.*); 
+0

मैंने पहले इस पुस्तकालय को देखा है, और फिर मुझे यह कहना है कि कोई एनीमेशन नहीं है जिसे मैं प्राप्त करना चाहता हूं। कृपया ध्यान दें, कि मैं वर्टिकल एनीमेशन द्वारा अप्रभावित दोनों टेक्स्ट व्यू को छोड़ना चाहता हूं। – Marek

संबंधित मुद्दे