Android viewpager的自定义动画
我正在使用viewPager和fragments,现在我正在尝试获得一个自定义动画,确切地说是 但是我有一些错误。我将把错误与代码片段一起放在注释中 班级活动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
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,页面总是空白的,或者如果我快速浏览页面,有些页面显示空白。