4

私のアプリケーションは FragmentStatePagerAdapter で Android の ViewPager を使用しており、Android 4.x 以降のみをサポートする必要があります。ViewPager に v13 サポート ライブラリを使用しているため、SupportFragments を処理する必要はありませんAndroid.app.Fragment。すべてが期待どおりに機能しますが、現在PageTransformerViewPager に a を追加しようとしていて、問題が発生しています。

ViewPager.setPageTransformer(bool, PageTransformer)はメソッドとして認識さPageTransformerれず、クラスとしても認識されません (インポートの多くの組み合わせを試しましたが、役に立ちませんでした)。v4 サポート ライブラリを使用するViewPager.setPageTransformerのも方法ですが、サポート ライブラリ v4 を使用する場合は、サポートSupportFragmentsしている Android のバージョンのために不要だと思っていた を使用する必要があります。

質問: v13 ライブラリはViewPagerPageTransformers をサポートしていますか? SupportFragments よりもネイティブ Fragments を使用する利点はありますか、それともサポート ライブラリ v4 を使用する必要がありますか?

編集:私は自分の問題を示すファイルのインポートと関連コードを追加しています

import java.lang.reflect.Field;
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

クラス内 (何も拡張しません) で、このメソッドでページ トランスフォーマーを設定しようとしています。

public View createView(LayoutInflater inflater, ViewGroup container) {
        // Inflate the layout containing a title and body text.
        ViewGroup rootView = (ViewGroup) inflater
                .inflate(R.layout.carousel_fragment, container, false);


        mContainer = (PagerContainer) rootView.findViewById(R.id.pager_container);
        //PagerContainer makes it easy to display more than one page from the ViewPager
        //on screen at once
        mPager = mContainer.getViewPager();


        mAdapter = new MyPagerAdapter(MainActivity.getActivity().getFragmentManager());
        mPager.setAdapter(mAdapter);

        mPager.setOffscreenPageLimit(2);
        mPager.setPageMargin(10);
        mPager.setClipChildren(false);
        mPager.setCurrentItem(mPager.getAdapter().getCount()/2, false);

        mPager.setPageTransformer(false, new PageTransformer(){
            @Override
            public void transformPage(View page, float position) {
                // do something that isn't default behavior
            }
        });

        Field mScroller;
        try {
            mScroller = ViewPager.class.getDeclaredField("mScroller");

            mScroller.setAccessible(true); 
            CustomScroller scroller = new CustomScroller(MainActivity.getContext());

            mScroller.set(mPager, scroller);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } 

        return rootView;
    }

私が得ている特定のエラーはcannot find symbol: PageTransformersetPageTransformerメソッドの同様のエラーです。私のプロジェクトにはandroid-support-v13.jarv4.jar がありますが、両方を含めたときに DEX エラーが発生したため、v4.jar はありません。

私はおそらく何かばかげたことをしているのですが、まだ理解できません。私はあなたが与えることができる任意の助けに感謝します.

4

4 に答える 4

1

ファイルcompile 'com.android.support:support-v13:23.1.1'に追加:dependenciesbuild.gradle

ここに画像の説明を入力

于 2016-04-20T19:57:06.227 に答える
1

v13サポートライブラリでこれを試しましたが、問題はありません:

mPager.setPageTransformer(false, new PageTransformer() {

            @Override
            public void transformPage(View page, float position) {
                // TODO Auto-generated method stub

            }
        });

実際、ViewPagerv4 jar の は v13 jar とまったく同じです。また、 s にPageTransformerはまったく依存しませんFragment。コードを提供していただけますか?

編集:

インポートがありません:

import android.support.v4.view.ViewPager.PageTransformer;

あなたのクラスにはありますか?PageTransformer匿名が実際に実装されていることを確認してくださいandroid.support.v4.view.ViewPager.PageTransformer

于 2013-11-14T00:07:59.223 に答える
1

「スクリーン スライドに ViewPager を使用する」チュートリアルに取り組んでいるときに同じ問題に遭遇しましたが、パッケージ化されている v4 サポート ライブラリのバージョンには PagerTransformer インターフェイスが含まれていません。そのため、jar を削除し、Android->extras->support->v13 フォルダーのバージョンに置き換えます。

于 2014-12-15T19:44:49.517 に答える
0

これがさらに役立つことを願っています(コンパイラが見つからなかったシンボルは次のような方法だと思います):

HoneyComb より下のプラットフォームを対象とする場合、これらのプラットフォームでは使用できない View (PageTransformer 実装クラス内) のこれらのメソッドを使用する必要があります。

View view=findViewById(R.id.viewInsidePager);
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);

代わりに使用:

ViewCompat.setAlpha(view,1);
ViewCompat.setTranslationX(view,0);
ViewCompat.setScaleX(view,1);
ViewCompat.setScaleY(view,1);
于 2014-07-28T06:36:38.280 に答える