2

在路径应用程序中,用户可以向下拖动配置文件信息以显示用户的图像。我需要在我们的应用程序中使用相同的动画。谁能指导我如何在android中创建这个动画?

我说的是http://cl.ly/MBQh中的动画

谢谢

4

2 回答 2

2

我认为您需要查看PullToRefresh Library。在这里你可以配置你的ListView的HeaderView。然后它会出现然后你下拉。此外,如果您拉得足够多,则会导致事件完成。

于 2013-09-29T13:53:12.270 回答
1

你基本上有两个视图,一个用户可以拖动,一个隐藏在下面,它们都是 a 的子级RelativeLayout

棘手的部分是顶视图的拖动/动画。请以我之前写的这个片段为例,在 x 轴上实现类似的效果。请注意,此逻辑位于扩展的View.-

final RelativeLayout wrapperDraggable = (RelativeLayout) findViewById(R.id.viewWrapperDraggable);
wrapperDraggable.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                initPoint = new Point((int) event.getRawX(), (int) event.getRawY());
            break;
            case MotionEvent.ACTION_MOVE:
                // Disable parent scrolling if user is dragging the view
                if (dragging || Math.abs(initPoint.x - event.getRawX()) > Math.abs(initPoint.y - event.getRawY()) * 2) {
                    dragging = true;                          
                    getParent().requestDisallowInterceptTouchEvent(true);
                } else {                                    
                    getParent().requestDisallowInterceptTouchEvent(false);
                }

                int offset = (int) Math.max(Math.min(0, event.getRawX() - initPoint.x), -CurrentViewClass.this.getWidth() * 0.45f);

                if (offset != lastOffset) {
                    TranslateAnimation anim = new TranslateAnimation(lastOffset, offset, 0, 0);
                    anim.setFillAfter(true);
                    anim.setFillEnabled(true);
                    anim.setDuration(0);                                         
                    wrapperDraggable.startAnimation(anim);

                    lastOffset = offset;
                }
            break;
            case MotionEvent.ACTION_UP:
                if (!dragging) {
                    // The user clicked the view
                }
            break;
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_OUTSIDE:
                dragging = false;
                TranslateAnimation anim = new TranslateAnimation(lastOffset, 0, 0, 0);
                anim.setFillAfter(true);
                anim.setDuration(300);
                wrapperDraggable.startAnimation(anim);
                lastOffset = 0;
            break;
        }

        return true;
    }
});

希望你觉得它有用。

于 2013-10-01T23:04:44.113 回答