8

アプリケーションで視差効果を実現しようとしています。インターフェイスをFragmentActivity実装し、スクロール イベントOnPageChangeListenerをリッスンする があります。ViewPager

XML でこの効果を実現するためにLinearLayout、バックグラウンドを持つ他のすべてのビューの背後に があり、それをonPageScrolledコールバックで移動します。スワイプするだけで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

}
}

ありがとうございました。

4

5 に答える 5

9

少し古いことは知っていますが、https://github.com/xgc1986/ParallaxPagerLibraryをご覧ください

onDraw メソッドをオーバーライドせず、その効果は画像だけでなく、あらゆる種類のビューで機能します

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

R.id.paraallaxContent は、この効果を持たせたいビューの ID です

他のソリューションでない限り、機能するために具体的な構造は必要なく、レイアウトに依存しません

デモ:ユーチューブ

于 2014-04-25T20:37:21.367 に答える
2

たぶん、このライブラリはあなたを助けることができます:

https://github.com/garrapeta/ParallaxViewPager

于 2014-03-22T19:34:27.990 に答える
2

このライブラリは、x 方向と y 方向で完全にカスタマイズ可能で、アルファ効果が含まれています。

https://github.com/prolificinteractive/ParallaxPager

インストール (v0.7 以降、更新については README を確認してください):

  1. Gradle を使用して Maven Central の依存関係として追加する

  2. ParallaxContainer代わりにレイアウト XML でカスタムを使用します。ViewPager

  3. 各ページのレイアウト XML ファイルを作成します (x/y/alpha 属性は、ページに出入りするオブジェクトごとに個別に設定できます)。

  4. アクティビティに追加するコピー/ペースト行がいくつかありonCreateます (正確な行については、README を参照してください)。

視差惑星アニメーション

于 2014-05-13T00:02:57.580 に答える
1

私が作成したこの小さなライブラリを見てください。これは ViewPager サブクラスであり、視差効果を機能させるために追加の構成を必要としません。

于 2014-05-09T18:32:41.337 に答える