在路径应用程序中,用户可以向下拖动配置文件信息以显示用户的图像。我们的应用需要同样的动画。谁能指导我如何在android中创建这个动画?
我说的是http://cl.ly/MBQh
中的动画谢谢
我认为你需要看看PullToRefresh库。这里你可以配置ListView的HeaderView。当你拉下它就会出现。如果你拉的足够多,你会导致事件发生。
你基本上有两个视图,一个用户可以拖动,一个隐藏在下面,它们都是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;
}
});