Android viewpager的自定义动画

Android viewpager的自定义动画,android,android-viewpager,fragment,android-animation,Android,Android Viewpager,Fragment,Android Animation,我正在使用viewPager和fragments,现在我正在尝试获得一个自定义动画,确切地说是 但是我有一些错误。我将把错误与代码片段一起放在注释中 班级活动 import android.support.v4.app.FragmentManager; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import

我正在使用viewPager和fragments,现在我正在尝试获得一个自定义动画,确切地说是

但是我有一些错误。我将把错误与代码片段一起放在注释中

班级活动

import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Menu;

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */
        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);

        // **ERROR:The method setPageTransformer(boolean, ViewPager.PageTransformer) in the type ViewPager is not applicable for the arguments (boolean, ZoomOutPageTransformer)**
        pager.setPageTransformer(true, new ZoomOutPageTransformer());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}
类变压器

import android.view.View;
    // **ERROR on 'ViewPager.PageTransformer --> ViewPager cannot be resolved to a type **
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer {
        private static float MIN_SCALE = 0.85f;
        private static float MIN_ALPHA = 0.5f;

        public void transformPage(View view, float position) {
            int pageWidth = view.getWidth();
            int pageHeight = view.getHeight();

            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);

            } else if (position <= 1) { // [-1,1]
                // Modify the default slide transition to shrink the page as well
                float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                float vertMargin = pageHeight * (1 - scaleFactor) / 2;
                float horzMargin = pageWidth * (1 - scaleFactor) / 2;
                if (position < 0) {
                    view.setTranslationX(horzMargin - vertMargin / 2);
                } else {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }

                // Scale the page down (between MIN_SCALE and 1)
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);

                // Fade the page relative to its size.
                view.setAlpha(MIN_ALPHA +
                        (scaleFactor - MIN_SCALE) /
                        (1 - MIN_SCALE) * (1 - MIN_ALPHA));

            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }
导入android.view.view;
//**无法将“ViewPager.PageTransformer-->ViewPager”上的错误解析为类型**
公共类ZoomoutPagetTransformer实现ViewPager.PageTransformer{
专用静态浮动最小刻度=0.85f;
专用静态浮动最小值α=0.5f;
公共页面(视图、浮动位置){
int pageWidth=view.getWidth();
int pageHeight=view.getHeight();
if(位置<-1){/[-无穷大,-1)
//这个页面在屏幕的左边。
视图。setAlpha(0);

}否则,如果(position在您更新android support v4库之后,您可以从eclipse中删除该项目。
然后再次导入项目。执行干净的构建,一切都会好起来的!

我已经解决了问题:

  • 下载最新版本
  • 浏览至android sdk windows\extras\android\support\v4
  • 将android-support-v4.jar复制到项目中的libs文件夹中
  • 清理你的项目
  • 运行你的代码

  • 这对我很有效,通过ecplise下载支持库给了我这个错误。这修复了我的问题

    @mXX几乎是正确的。但是对于那些仍然有问题的人(像我),我需要在他的过程中添加一点

    您需要更新您的Android支持库软件包。但是如果您现在有了它,您需要先卸载它,然后再重新安装,以获得新的软件包。

    如果您有IntellijIdea:

  • 从“工具/Android/SDK管理器”打开SDK管理器窗口
  • 找到Exteras文件夹,然后检查Android支持库。如果其状态为 已安装单击“删除1个软件包…”将其删除
  • 检查此软件包并单击安装按钮
  • 导航到\extras\android\support\v4,然后复制 android-support-v4.jar并将其粘贴到您的Libs文件夹中
  • Idea应该自动重新编译项目,但是如果它没有这样做的话 然后您应该通过单击手动重新编译它 “生成/重建项目”

  • 就这样;)

    对于仍停留在这个问题上的任何人,当前支持v4的问题是不导入v4 ViewPager接口:它不需要静态ViewPager类实例。只需实现PageTransformer。PageTransformer接口已经用ViewPager包装在里面

    public class ZoomOutPageTransformer implements PageTransformer {
    
        private static float MIN_SCALE = 0.85f;
        private static float MIN_ALPHA = 0.5f;
    
        public void transformPage(View view, float position) {
            int pageWidth = view.getWidth();
            int pageHeight = view.getHeight();
    
            if (position < -1) { // [-Infinity,-1)
                // This page is way off-screen to the left.
                view.setAlpha(0);
    
            } else if (position <= 1) { // [-1,1]
                // Modify the default slide transition to shrink the page as well
                float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
                float vertMargin = pageHeight * (1 - scaleFactor) / 2;
                float horzMargin = pageWidth * (1 - scaleFactor) / 2;
                if (position < 0) {
                    view.setTranslationX(horzMargin - vertMargin / 2);
                } else {
                    view.setTranslationX(-horzMargin + vertMargin / 2);
                }
    
                // Scale the page down (between MIN_SCALE and 1)
                view.setScaleX(scaleFactor);
                view.setScaleY(scaleFactor);
    
                // Fade the page relative to its size.
                view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE)
                        / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
    
            } else { // (1,+Infinity]
                // This page is way off-screen to the right.
                view.setAlpha(0);
            }
        }
    }
    
    公共类ZoomOutPageTransformer实现PageTransformer{
    专用静态浮动最小刻度=0.85f;
    专用静态浮动最小值α=0.5f;
    公共页面(视图、浮动位置){
    int pageWidth=view.getWidth();
    int pageHeight=view.getHeight();
    if(位置<-1){/[-无穷大,-1)
    //这个页面在屏幕的左边。
    视图。setAlpha(0);
    
    }否则如果(定位只需将编译'com.android.support:support-v13:23.1.1'添加到build.gradle中的依赖项()

    您是否在声明
    ZoomoutPagetTransformer
    的文件中导入了
    ViewPager.PageTransformer
    界面?代码片段是我所有的,我还使用快捷键“ctrl+shift+o”来获得所有正确的导入。因此,我想我已经完成了所有需要的导入。您是否有
    导入android.support.v4.view.ViewPager.PageTransformer;
    ZoomoutPagetTransformer
    文件中?如果不是,你应该有它。我有它,但我仍然得到相同的错误。我甚至清理了项目。我有它,但它说它没有被使用??我应该删除我的项目吗?更新支持v4库是什么意思?我怎么做?设置
    view.setAlpha(0);
    给我带来了一个bug,我花了一天的时间才发现。如果我单击Tablayout中的tab,页面总是空白的,或者如果我快速浏览页面,有些页面显示空白。