Android视差效果和视图传呼机

我试图在我的应用程序中实现视差效果。 我有一个FragmentActivity实现了OnPageChangeListener接口,并侦听我的ViewPager滚动事件。

为了在我的XML中达到这个效果,我在背景的所有其他视图背后都有一个LinearLayout ,并将其移动到onPageScrolledcallback中。 如果我只是轻扫一切OK,效果起作用,背景位置改变。 但是当我的手指离开屏幕时,背景被重新绘制在原来的位置(即使我在新的页面中)。 我不明白为什么会发生这种情况。 这里是我的FragmentActivity的代码:

 public class MainActivity extends FragmentActivity implements OnPageChangeListener { // DEFINE THE PAGEADAPTER private ViewPager viewPager; private com.angtrim.ecomilano.PagerAdapter pagerAdapter; private int oldPosition = 0; private int offSet = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // CREATE VIEWPAGER viewPager = (ViewPager) findViewById(R.id.viewpager); pagerAdapter = new PagerAdapter(getApplicationContext(),getSupportFragmentManager()); // SET THE ADAPTER viewPager.setAdapter(pagerAdapter); // SET FIRST ITEM viewPager.setCurrentItem(0); // SET CHANGE PAGE LISTENER viewPager.setOnPageChangeListener(this); } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // RIGHT SWIPE if((oldPosition < arg2)) { offSet = (int)((arg2 - oldPosition)*0.5); oldPosition = arg2; } // LEFT SWIPE else if( (oldPosition > arg2)) { offSet = (int) (-(oldPosition - arg2)*0.5); oldPosition = arg2; } findViewById(R.id.backi).offsetLeftAndRight(offSet); } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub } } 

谢谢。

Solutions Collecting From Web of "Android视差效果和视图传呼机"

我知道这是有点老,但看看https://github.com/xgc1986/ParallaxPagerLibrary

它不覆盖onDraw方法,不仅影响图像,而且适用于各种视图

 mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent)); 

R.id.paraallaxContent是你想要这个效果的视图的ID

除非其他解决scheme,不需要任何具体的结构来工作,而且是独立的布局

演示: YouTube

我知道这个问题很老,我不能真正回答你的问题。 但是,一个名叫Matthieu的人创造了ViewPager视差效果的一个很好的例子,可以在下面的链接中find。

https://github.com/MatthieuLJ/ViewPagerParallax

也许这个图书馆可以帮助你:

https://github.com/garrapeta/ParallaxViewPager

这个库是完全可定制的X和Y方向,包括阿尔法效果:

https://github.com/prolificinteractive/ParallaxPager

安装(从v0.7开始,请查阅README获取更新):

  1. 添加为Graven的Maven Central依赖项

  2. 在布局XML中使用自定义的ParallaxContainer ,而不是ViewPager

  3. 为每个页面创build一个布局XML文件(可以为移入/移出页面的每个对象分别设置x / y / alpha属性)

  4. 有几个复制/粘贴行添加到您的活动的onCreate (头文件到准确的行自述)

视差行星动画

看看我创build的这个小型库 ,它是一个ViewPager子类,它不需要额外的configuration来使视差效果起作用。