我正在尝试在我的应用程序中实现视差效果。
我有FragmentActivity
实现OnPageChangeListener
接口并侦听我的ViewPager
滚动事件。
要在我的XML中实现此效果,我的背景中所有其他视图背后都有一个LinearLayout
,我将其移至onPageScrolled
回调中。
如果我只是滑动就可以了,效果会起作用,背景位置也会改变。但是当我的手指离开屏幕时,背景会重新绘制在原始位置(即使我在新页面中)。
我不明白为什么会这样。
这是我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
}
}
谢谢。
答案 0 :(得分:9)
我知道它有点陈旧但看看https://github.com/xgc1986/ParallaxPagerLibrary
它不会覆盖onDraw方法,不仅影响图像效果,而且适用于各种视图
mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));
R.id.paraallaxContent是您希望产生此效果的视图的ID
除非其他解决方案,不需要任何具体的结构,并且也是独立的布局
演示:youtube
答案 1 :(得分:2)
我知道问题已经过时了,我无法回答你的问题。但是,一个名叫Matthieu的人创造了一个很好的ViewPager视差效果示例,可以在以下链接中找到。
答案 2 :(得分:2)
也许这个图书馆可以帮到你:
答案 3 :(得分:2)
此库可在x和y方向完全自定义,并包含alpha效果:
https://github.com/prolificinteractive/ParallaxPager
安装(自v0.7起,检查README以获取更新):
使用Gradle
在布局XML中使用自定义ParallaxContainer
而不是ViewPager
为每个页面创建一个布局XML文件(可以为每个移入/移出页面的对象单独设置x / y / alpha属性)
有一些复制/粘贴行要添加到您的Activity的onCreate
(前往自述文件的精确行)
答案 4 :(得分:1)
看看我创建的这个small library - 它是一个ViewPager子类,它不需要额外的配置来使视差效果起作用。