ViewPager PageTransformer with Support Library v13

时间:2013-11-13 23:48:45

标签: android android-viewpager

我的应用程序使用Android的ViewPager和FragmentStatePagerAdapter,它只需要支持Android 4.x或更高版本。我正在为ViewPager使用v13支持库,所以我不需要处理SupportFragments,我只需要使用Android.app.Fragment。一切都按预期工作,但现在我正在尝试向我的ViewPager添加PageTransformer,我遇到了问题。

ViewPager.setPageTransformer(bool, PageTransformer)未被识别为方法,并且PageTransformer未被识别为类(我尝试了许多导入组合无效)。使用v4支持库,ViewPager.setPageTransformer是一种方法,但如果我使用支持库v4,我必须使用SupportFragments,由于我支持的Android版本,我认为这是不必要的。 / p>

问题:是否支持v13库的ViewPager支持PageTransformers?使用本机片段而不是SupportFragments有什么好处,或者我应该只使用支持库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.jar但没有v4.jar,因为当我将它们包括在内时我得到了DEX错误。

我可能做了些蠢事,但我仍然无法弄明白。我感谢您给予的任何帮助。

4 个答案:

答案 0 :(得分:1)

我刚刚尝试使用v13支持库,我发现没有问题:

mPager.setPageTransformer(false, new PageTransformer() {

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

            }
        });

实际上,v4 jar中的ViewPager与v13 jar中的PageTransformer完全相同。此外,Fragment根本不依赖于import android.support.v4.view.ViewPager.PageTransformer; 。你能提供一些代码吗?

编辑:

您缺少导入:

PageTransformer
你在课堂上有吗?请确保您的匿名android.support.v4.view.ViewPager.PageTransformer实际上实现了{{1}}而不是其他内容。

答案 1 :(得分:1)

我在处理"使用ViewPager for Screen Slides"时遇到了同样的问题。教程,但打包的v4支持库的版本不包含PagerTransformer接口。因此,请删除jar,并将其替换为Android-> extras-> support-> v13文件夹中的版本。

答案 2 :(得分:1)

compile 'com.android.support:support-v13:23.1.1'添加到dependencies文件中的build.gradle

enter image description here

答案 3 :(得分: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);
相关问题