Android 在ViewPager中输入动画
我有以下视图:显示3个片段的ViewPager。用户可以水平滚动查看ViewPager中的其他片段。 我需要创建一个动画,当创建活动并填充ViewPager时,显示从屏幕右侧进入的片段。 这可能吗?谢谢 XML: 适配器:Android 在ViewPager中输入动画,android,android-fragments,android-viewpager,android-animation,Android,Android Fragments,Android Viewpager,Android Animation,我有以下视图:显示3个片段的ViewPager。用户可以水平滚动查看ViewPager中的其他片段。 我需要创建一个动画,当创建活动并填充ViewPager时,显示从屏幕右侧进入的片段。 这可能吗?谢谢 XML: 适配器: public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter { ArrayList<Fragment> fragmentsList; private flo
public class MyFragmentStatePagerAdapter extends FragmentStatePagerAdapter {
ArrayList<Fragment> fragmentsList;
private float pageWidth = 1;
public void setPageWidth(float pageWidth) { this.pageWidth = pageWidth; }
public MyFragmentStatePagerAdapter(FragmentManager fm, ArrayList<Fragment> fragmentsList) {
super(fm);
this.fragmentsList = fragmentsList;
}
@Override
public int getCount() {
return fragmentsList.size();
}
@Override
public Fragment getItem(int position) {
if (position<fragmentsList.size() & fragmentsList.get(position)!=null) {
return fragmentsList.get(position);
}
return null;
}
@Override
public float getPageWidth(int position) {
return(pageWidth);
}
}
公共类MyFragmentStatePagerAdapter扩展了FragmentStatePagerAdapter{
ArrayList碎屑岩;
私有浮动页面宽度=1;
public void setPageWidth(float pageWidth){this.pageWidth=pageWidth;}
公共MyFragmentStatePagerAdapter(FragmentManager fm、ArrayList fragmentsList){
超级(fm);
this.fragmentsList=fragmentsList;
}
@凌驾
public int getCount(){
返回fragmentsList.size();
}
@凌驾
公共片段getItem(int位置){
如果(位置这里有一个链接可以帮助您:
它与公认的解决方案类似,但使用相同的插值器,仅根据系数更改持续时间。您需要在XML中使用ViewPagerCustomDuration而不是ViewPager,然后可以执行以下操作:
ViewPagerCustomDuration vp = (ViewPagerCustomDuration) findViewById(R.id.myPager);
vp.setScrollDurationFactor(2); // make the animation twice as slow
好的,我找到了解决方案。我只需扩展ViewPager并在onDraw中制作动画。
此代码正在按我的需要工作:
public class ViewPagerCustom extends ViewPager {
private Context mContext;
private boolean startAnimationDone = false;
public ViewPagerCustom(Context context) {
super(context);
mContext = context;
init();
}
public ViewPagerCustom(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
DisplayMetrics metrics;
TranslateAnimation anim;
private void init() {
metrics = mContext.getResources().getDisplayMetrics();
anim = new TranslateAnimation(metrics.widthPixels+200, 0, 0, 0);
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(500);
}
private Canvas enterAnimation(Canvas c) {
startAnimationDone = true;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
child.startAnimation(anim);
}
return c;
}
@Override
protected void onDraw(Canvas c) {
if (startAnimationDone==false) {
c = enterAnimation(c);
}
super.onDraw(c);
}
}
public类ViewPagerCustom扩展了ViewPager{
私有上下文;
私有布尔startAnimationDone=false;
公共视图页面RCUSTOM(上下文){
超级(上下文);
mContext=上下文;
init();
}
public ViewPagerCustom(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
init();
}
显示度量;
翻译动画;
私有void init(){
metrics=mContext.getResources().getDisplayMetrics();
anim=新的TranslateAnimation(metrics.widthPixels+200,0,0,0);
动画设定插补器(新减速插补器());
动画设定持续时间(500);
}
私有画布动画(画布c){
startAnimationDone=true;
final int childCount=getChildCount();
for(int i=0;i
谢谢,但我需要在OnCreate期间仅在创建ViewPager时才显示动画。
ViewPagerCustomDuration vp = (ViewPagerCustomDuration) findViewById(R.id.myPager);
vp.setScrollDurationFactor(2); // make the animation twice as slow
public class ViewPagerCustom extends ViewPager {
private Context mContext;
private boolean startAnimationDone = false;
public ViewPagerCustom(Context context) {
super(context);
mContext = context;
init();
}
public ViewPagerCustom(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
DisplayMetrics metrics;
TranslateAnimation anim;
private void init() {
metrics = mContext.getResources().getDisplayMetrics();
anim = new TranslateAnimation(metrics.widthPixels+200, 0, 0, 0);
anim.setInterpolator(new DecelerateInterpolator());
anim.setDuration(500);
}
private Canvas enterAnimation(Canvas c) {
startAnimationDone = true;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View child = getChildAt(i);
child.startAnimation(anim);
}
return c;
}
@Override
protected void onDraw(Canvas c) {
if (startAnimationDone==false) {
c = enterAnimation(c);
}
super.onDraw(c);
}
}