7

Swipe nach oben und unten Wirkung wie jene Nachrichten-Apps inshorts, Wanderung Nachrichten, Murmeln.Android: Layout-Animation wie Inshorts Nachrichten-App

ganzes Layout reibungslos auf/ab.
App über diesen Link inshorts und murmur überprüfen.

ich diesen Code ... versucht

public class VerticalViewPager extends ViewPager { 
    public VerticalViewPager(Context context) { 
     super(context); 
     init(); 
    } 

    public VerticalViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 
    private void init() { 
     // The majority of the magic happens here 
     setPageTransformer(true, new VerticalPageTransformer()); 
     // The easiest way to get rid of the overscroll drawing that happens on the left and right 
     setOverScrollMode(OVER_SCROLL_NEVER); 
    } 
    private class VerticalPageTransformer implements PageTransformer { 

     @SuppressLint("NewApi") 
     @Override 
     public void transformPage(View view, float position) { 

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

      } else if (position <= 1) { // [-1,1] 
       view.setAlpha(1); 

       // Counteract the default slide transition 
       view.setTranslationX(view.getWidth() * -position); 

       //set Y position to swipe in from top 
       float yPosition = position * view.getHeight(); 
       view.setTranslationY(yPosition); 

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

    /** 
    * Swaps the X and Y coordinates of your touch event. 
    */ 
    private MotionEvent swapXY(MotionEvent ev) { 
     float width = getWidth(); 
     float height = getHeight(); 

     float newX = (ev.getY()/height) * width; 
     float newY = (ev.getX()/width) * height; 

     ev.setLocation(newX, newY); 

     return ev; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev){ 
     boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); 
     swapXY(ev); // return touch coordinates to original reference frame for any child views 
     return intercepted; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return super.onTouchEvent(swapXY(ev)); 
    } 

} 

In MainActivity.java

VerticalViewPager Pager2; 
PagerAdapter adapter; 
String[] articleTitle; 
String[] articleName; 
String[] articleDiscription; 

OnCreate() 

Pager2=(VerticalViewPager)findViewById(R.id.pager); 


// Pass results to ViewPagerAdapter Class 
adapter = new ViewPagerAdapter(getActivity(), articleTitle, articleName,  articleDiscription, btnBack,articleImage); 

// Binds the Adapter to the ViewPager 
Pager2.setAdapter(adapter); 

activity_main.xml

<com.example.flipnews.VerticalViewPager 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/pager" 
    /> 

In meinem Code einfach up-down Swipe getan, wie dies link. aber ich möchte bessere Animationseffekte wie die oben genannten Apps erstellen. oder Telefon eingebauten Foto-Galerie-Effekt.

Vielen Dank im Voraus.

+0

Hallo, Viveka ... wir können Ihnen nicht helfen, Dinge zu entwickeln ... wir können Ihnen nur bei Problemen mit dieser Implementierung helfen. Sie müssen es selbst ausprobieren und später Ihren Code mit den Problemen veröffentlichen. –

+1

@Viveka Wenn Sie irgendeine Lib für diese Animation gefunden haben, lassen Sie es mich wissen. – Dev

+1

Ich habe diesen Code bereits getestet, aber keine richtige Ausgabe bekommen. Überprüfen Sie meinen Code. - @MarianoZorrilla –

Antwort

13

Ich fand die Lösung nach vielen Untersuchungen, ich hoffe, es ist hilfreich für andere.

Tipp: Legen Sie die Pager-Hintergrundfarbe schwarz für einen besseren Swipe-Effekt fest.

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

     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.setAlpha(1); 
       //view.setTranslationX(1); 
       view.setScaleX(1); 
       view.setScaleY(1); 
       float yPosition = position * view.getHeight(); 
       view.setTranslationY(yPosition); 
       view.setTranslationX(-1 * view.getWidth() * position); 

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

       view.setTranslationX(-1 * view.getWidth() * position); 

       // 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); 
      } 

     } 
    } 

    private MotionEvent swapXY(MotionEvent ev) { 
     float width = getWidth(); 
     float height = getHeight(); 

     float newX = (ev.getY()/height) * width; 
     float newY = (ev.getX()/width) * height; 

     ev.setLocation(newX, newY); 

     return ev; 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev){ 
     boolean intercepted = super.onInterceptTouchEvent(swapXY(ev)); 
     swapXY(ev); // return touch coordinates to original reference frame for any child views 
     return intercepted; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     return super.onTouchEvent(swapXY(ev)); 
    } 

} 
+0

Working Awesome Sie gespeichert meinen Tag !!!!! – user3069590

+0

@Viveka Ich habe ein Problem, mein View-Pager hat eine Gitteransicht darin. beim Streichen auf dem Gitter Swipe-Funktion funktioniert nicht – Praneeth

+0

Hallo, ich habe versucht, Ihre Antwort und es funktioniert super. Ich bin ein Anfänger darin. Können Sie mir eine kurze Beschreibung geben, was genau Sie hier tun, zum Beispiel 'view.setTranslationX (-1 * view.getWidth() * position);' this? – Vishnu