フラグメントをスライドするときに視差効果をエミュレートしようとしています。beginFakeDragとfakeDragByについて読んだことがありますが、正直なところ、それが私の問題に対する最善のアプローチであるかどうかはわかりません。
誰かがViewPagerで同様のことをしたか、これにどのようにアプローチすべきかについてのヒントがありますか?
ありがとうございました
この質問は少し古いですが、まさにそれをやろうとしていたときに見つけました...
基本的にViewPager
を拡張し、onDraw
をオーバーライドする独自のソリューションを実装しました。
簡単な例ですべてのコードを見つけることができます ここ
カスタムライブラリを使用せずにこれを行う簡単な方法は、ViewPager.PageTransformer
を実装することです。
背景要素に同じid
を使用するようにレイアウトを作成しました。私の例では、すべての背景画像はID background
を使用します
<ImageView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:id="@+id/background"
Android:src="@drawable/img12"
Android:scaleType="fitXY"/>
次に、ViewPager.PageTransformer
を実装するときに、次のようにそのイメージを参照できます。
public class Transformer implements ViewPager.PageTransformer{
@Override
public void transformPage(View page, float position) {
if(position >= -1 && position <= 1){
page.findViewById(R.id.background).setTranslationX(-position * page.getWidth() / 2);
} else {
page.setAlpha(1);
}
}
}
最後に、ViewPager.PageTransformer
をViewPager
にそのように割り当てます。
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setPageTransformer(false, new Transformer());
私はそれが少し古いことを知っていますが、それを見てください https://github.com/xgc1986/ParallaxPagerLibrary
OnDrawメソッドをオーバーライドすることはなく、効果は画像だけでなく、あらゆる種類のビューで機能します。
mPager.setPageTransformer(false, new ParallaxTransformer(R.id.parallaxContent));
R.id.paraallaxContentは、この効果を持たせたいビューのIDです。
他の解決策がない限り、機能するために具体的な構造は必要なく、レイアウトに依存しません
デモ: youtube
このライブラリは、x方向とy方向に完全にカスタマイズ可能で、アルファ効果が含まれています。
https://github.com/prolificinteractive/ParallaxPager
インストール(v0.7以降、更新についてはREADME)を確認してください):
GradleでMavenCentralの依存関係として追加
レイアウトXMLではParallaxContainer
の代わりにViewPager
を使用してください
各ページのレイアウトXMLファイルを作成します(x/y/alpha属性は、ページに出入りするオブジェクトごとに個別に設定できます)
アクティビティのonCreate
に追加するコピー/貼り付け行がいくつかあります
あなたはこれを見ることができます:
https://github.com/luxsypher/ParallaxViewPager
ビューの任意の要素に視差効果を適用して、すべての異なる速度を与えることができます
多分このライブラリはあなたを助けることができます:
これは私が書いたViewPagerサブクラスで、非常に使いやすいです。何か違うことをする必要はありません。依存関係を含めて、標準のViewPagerとして使用するだけです。 GitHub で利用できます。
たぶん、このライブラリは役に立つかもしれません: https://github.com/matrixxun/ProductTour ?
「ViewPager.PageTransformer」を使用して、内部の動きを変えます。