2013-03-17 132 views
6

我正在处理viewPager和片段,现在我正在试图获得一个自定义动画,zoom-out page transformation是精确的。viewpager的自定义动画

但是我收到了一些错误。我将把错误置于代码片段的评论中。

类MainActivity

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; 
    } 
} 

类ZoomOutPageTransformer

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); 
      } 
     } 
    } 
+0

你有没有导入'ViewPager。您声明'ZoomOutPageTransformer'的文件中的PageTransformer'界面? – Luksprog 2013-03-17 20:53:08

+0

代码片段是我所有的,我也做了快捷键'ctrl + shift + o'来获得所有正确的导入。所以我想我有所有需要的进口。 – mXX 2013-03-18 10:30:23

+0

您是否在'ZoomOutPageTransformer'文件中有'import android.support.v4.view.ViewPager.PageTransformer;'?如果不是,你应该拥有它。 – Luksprog 2013-03-18 10:47:40

回答

6

我已经解决了这个问题:

  1. 下载最新Android SDK
  2. 浏览Android的SDK-WINDOWS \演员\机器人\ SUPPORT \ V4
  3. 复制Android的支持 - v4.jar到您项目中的libs文件夹
  4. 清理项目
  5. 运行您的代码

这工作对我来说,通过ecplise下载支持库给了我这个错误。这解决了我的问题

+0

谢谢,最新的android-support-v4.jsr也为我工作 – inox 2014-12-14 05:36:59

0

在更新的Android支持V4库,你可以删除Eclipse中的项目。 然后再次导入该项目。干净的构建,一切都会好的!

+0

我应该删除我的项目吗?你是什​​么意思更新支持v4库?我该怎么做? – mXX 2013-03-21 10:01:29

2

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

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

如果你有IntellijIdea:

  1. 打开SDK管理器,从 “工具/安卓/ SDK管理器”
  2. 窗口中找到Exteras文件夹,然后检查Android的支持库。如果其状态为 已安装,请点击“删除1包...”以删除它。
  3. 选中此软件包并单击安装按钮。
  4. 导航到\ extras \ android \ support \ v4,然后复制 android-support-v4.jar并将其粘贴到您的Libs文件夹中。
  5. 理念应自动重新编译项目,但是如果它没有这样做 是,那么你应该手动重新编译它通过点击 “建设/改造工程”

就是这样;)

1

对于任何人仍然坚持当前的支持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); 
     } 
    } 
} 
0

只需添加编译 'com.android.support:support-v13:23.1.1'依赖的build.gradleScreenshot