如何在android中使cardView上下滑动动画?

时间:2015-12-23 07:41:09

标签: android animation android-viewpager android-cardview slideup

我正在构建一个类似于inshorts的android应用程序。我想上下滑动我的cardView。我正在做什么 - 我正在使用webAPI从服务器解析数据,然后使用在cardView中显示的BaseAdapter。但是现在我需要向上滑动它应该向上移动并且应该显示下一张位置卡。

2 个答案:

答案 0 :(得分:1)

您可以使用 ViewPager 片段执行此操作,然后您需要使用视图寻呼机放置幻灯片动画。对于水平幻灯片,您可以看到开发人员参考http://developer.android.com/training/animation/screen-slide.html

之后,您需要稍微修改视图寻呼机,使其行为像垂直而不是水平,您可以使用以下代码实现此目的:

public class VerticalViewPager extends ViewPager {

public VerticalViewPager(Context context) {
    super(context);
    init();
}

public VerticalViewPager(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

private void init() {
    // The majority of the magic happens here
    setPageTransformer(true, new VerticalPageTransformer());
    // The easiest way to get rid of the overscroll drawing that happens on the left and right
    setOverScrollMode(OVER_SCROLL_NEVER);
}

private class VerticalPageTransformer implements ViewPager.PageTransformer {
 private static final float MIN_SCALE = 0.75f;
    @Override
    public void transformPage(View view, float position) {

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

        }  else if (position <= 0) { // [-1,0]
            // Use the default slide transition when moving to the left page
            view.setAlpha(1);
            // Counteract the default slide transition
            view.setTranslationX(view.getWidth() * -position);

            //set Y position to swipe in from top
            float yPosition = position * view.getHeight();
            view.setTranslationY(yPosition);
            view.setScaleX(1);
            view.setScaleY(1);

        } else if (position <= 1) { // [0,1]
            view.setAlpha(1);

            // Counteract the default slide transition
            view.setTranslationX(view.getWidth() * -position);


            // Scale the page down (between MIN_SCALE and 1)
            float scaleFactor = MIN_SCALE
                    + (1 - MIN_SCALE) * (1 - Math.abs(position));
            view.setScaleX(scaleFactor);
            view.setScaleY(scaleFactor);

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }

    }

}

/**
 * Swaps the X and Y coordinates of your touch event.
 */
private MotionEvent swapXY(MotionEvent ev) {
    float width = getWidth();
    float height = getHeight();

    float newX = (ev.getY() / height) * width;
    float newY = (ev.getX() / width) * height;

    ev.setLocation(newX, newY);

    return ev;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
    boolean intercepted = super.onInterceptTouchEvent(swapXY(ev));
    swapXY(ev); // return touch coordinates to original reference frame for any child views
    return intercepted;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    return super.onTouchEvent(swapXY(ev));
}
}  

答案 1 :(得分:0)

一种方法是使用fragmentsViewPager加载页面,然后指定属性动画来为片段设置动画。

如果您不熟悉片段,请尝试从here

开始

然后您需要ViewPager在页面之间滑动。 here

属性动画通常用于动画本机片段(Android.App.Fragment)。 see this 并看到swap fragments using Animation