2014-12-01 69 views
0

我正在开发我的应用程序。第一次启动时,您应该在屏幕中间看到一张卡片。当您将viewpager页面移动到下一个位置(从1到2)时,该卡片应该在屏幕上向下和向左移动。使用ViewPager.PageTransformer()移动视图项目

我做了一堆搜索,并得出结论,PageTransformer是我需要寻找的地方。

问题是我不能在pageTransformer上找到任何文档,而不是使用我不想做的过渡动画。

任何人都可以指向我想要完成的一个很好的示例或教程或者是否有人比pageTransformer有更好的选择?

我可以得到要移动的元素,但我无法弄清楚起始位置来自哪里(如果在设置变换器之前做了setX,它似乎被忽略了)。

下面是我在代码:

package com.example.myapplication.app; 

import android.app.Activity; 
import android.graphics.Point; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBarActivity; 
import android.util.DisplayMetrics; 
import android.util.Log; 
import android.view.*; 
import android.view.animation.LinearInterpolator; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 


public class MainActivity extends ActionBarActivity { 

    private static final int NUM_PAGES = 5; 

    View card1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     RelativeLayout papa = (RelativeLayout) findViewById(R.id.mainLayout); 
     card1 = getLayoutInflater().inflate(R.layout.small_card, papa, false); 

     papa.addView(card1); 

     ViewPager pager = (ViewPager) findViewById(R.id.pager); 
     pager.setAdapter(new ScreenSlidePagerAdapter(getSupportFragmentManager())); 
     pager.setPageTransformer(true, new ViewPager.PageTransformer() { 
      @Override 
      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. 
       } else if (position <= 1) { // [-1,1] 
        card1.setTranslationX(-(position) * (pageWidth + card1.getWidth())); 

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

     pager.setCurrentItem(1); 
    } 

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
     public ScreenSlidePagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return new ViewPagerFragment(); 
     } 

     @Override 
     public int getCount() { 
      return NUM_PAGES; 
     } 
    } 
} 
+0

你想在用户滚动页面之后卡片保留在页面上吗? – user3806339 2014-12-01 22:58:04

+0

我希望它从屏幕中央朝向左下方,以屏幕结束 – Psest328 2014-12-01 22:59:33

+0

您可以使用pagetransformer在卡上添加动画。这里是我找到的一个例子:https://medium.com/@BashaChris/the-android-viewpager-has-become-a-fairly-popular-component-among-android-apps-its-simple-6bca403b16d4。他们会在页面中显示不同的翻译 – user3806339 2014-12-01 23:06:37

回答