Android 在SnapChat等活动之间滑动?

Android 在SnapChat等活动之间滑动?,android,android-activity,snapchat,Android,Android Activity,Snapchat,我正在开发一个有多个活动的应用程序,我想在活动(而不是片段)之间实现滑动(左、右、上、下)转换就像snapchat一样。我做了一些研究,但没有找到合适的方法。有人能建议我如何处理上述情况吗?谢谢。我不相信通过使用活动可以获得同样的平滑滑动。(有人可以随意纠正我)。您可以手动捕获刷卡并加载下一个活动。你不会看到一个“预览”,这将非常类似于只点击一个按钮 视图寻呼机提供的平滑度是由片段造成的。同样(如果我没有弄错的话),一次只能向用户显示一个活动。因此,无法显示下一个活动的预览。片段可以绕过这个问题

我正在开发一个有多个活动的应用程序,我想在活动(而不是片段)之间实现滑动(左、右、上、下)转换就像snapchat一样。我做了一些研究,但没有找到合适的方法。有人能建议我如何处理上述情况吗?谢谢。

我不相信通过使用活动可以获得同样的平滑滑动。(有人可以随意纠正我)。您可以手动捕获刷卡并加载下一个活动。你不会看到一个“预览”,这将非常类似于只点击一个按钮

视图寻呼机提供的平滑度是由片段造成的。同样(如果我没有弄错的话),一次只能向用户显示一个活动。因此,无法显示下一个活动的预览。片段可以绕过这个问题,因为您可以有多个片段

我不确定你是否有充分的理由不使用碎片。它们的使用非常简单,您或多或少仍然可以使用活动。每个活动都有一个片段

因此,虽然我不想在你想使用活动时回避回答这个问题,但我不相信你能够继续使用活动并获得期望的结果。与试图通过活动自定义功能相比,使用片段会更容易

更新:


想要验证您不能同时有两个活动。因此,无论您要做什么,您都必须将功能从单个活动中分离出来才能做到这一点。虽然您可以在没有碎片的情况下完成这项工作,但最终将得到一个复杂的解决方案。我建议使用Android提供的功能并将其转换为片段。这很直截了当

您可以通过5个布局将它们放在一起实现这一点…例如,使菜单中只有1个可见..而当用户触摸右侧时,例如,布局右键将弹出尝试从右向左移动,但只有当用户从右向左滑动布局时..布局右键才会出现在菜单布局…将开始淡入。。。如果用户想进入菜单,将从左向右滑动,进入菜单的第一个布局

例如:

private void slide(final View v) {
    if (v.getLeft() != 0) {
        Animation toLeft = new TranslateAnimation(v.getRight() - 72, 0, 0, 0);
        toLeft.setDuration(animDuration);
        toLeft.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                v.clearAnimation();
                RelativeLayout.LayoutParams params = (LayoutParams) v
                        .getLayoutParams();
                params.leftMargin = 0;
                params.rightMargin = 0;
                v.setLayoutParams(params);
            }
        });
        v.startAnimation(toLeft);
    }
    else {
        Animation toRigh = new TranslateAnimation(0, -v.getWidth() - 72, 0, 0);
        toRigh.setDuration(animDuration);
        toRigh.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                v.clearAnimation();
                RelativeLayout.LayoutParams params = (LayoutParams) v
                        .getLayoutParams();
                params.leftMargin = (int) -(v.getWidth() - v.getWidth() * .15f);
                params.rightMargin = (int) (v.getWidth() * .85f);
                v.setLayoutParams(params);
            }
        });
        v.startAnimation(toRigh);
    }
}

private void slideBack(final View v) {
    if (v.getLeft() != 0) {
        Animation toLeft = new TranslateAnimation(-v.getLeft(), 0, 0, 0);
        toLeft.setDuration(animDuration + 100);
        toLeft.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                v.clearAnimation();
                RelativeLayout.LayoutParams params = (LayoutParams) v
                        .getLayoutParams();
                params.leftMargin = 0;
                params.rightMargin = 0;
                v.setLayoutParams(params);
            }
        });
        v.startAnimation(toLeft);
    }
}


@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        xPos = (int) event.getX();
    }

    if (event.getAction() == MotionEvent.ACTION_MOVE) {
        RelativeLayout.LayoutParams params = (LayoutParams) v.getLayoutParams();
        if (params.rightMargin + 1 > 0) {
            params.leftMargin = (int) (event.getRawX() - xPos);
            params.rightMargin = (int) (-event.getRawX() + xPos);
            v.setLayoutParams(params);
        }
    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        RelativeLayout.LayoutParams params = (LayoutParams) v.getLayoutParams();
        if (params.rightMargin < v.getWidth() / 2) {
            params.leftMargin = 0;
            params.rightMargin = 0;
        }
        else {
            params.leftMargin = (int) -(v.getWidth() - v.getWidth() * .15f);
            params.rightMargin = (int) (v.getWidth() * .85f);
        }

        v.setLayoutParams(params);
    }
    return true;
}
private void幻灯片(最终视图五){
如果(v.getLeft()!=0){
动画toLeft=新的TranslateAnimation(v.getRight()-72,0,0,0);
toLeft.setDuration(animDuration);
toLeft.setAnimationListener(新的AnimationListener(){
@凌驾
onAnimationStart上的公共无效(动画){
}
@凌驾
onAnimationRepeat上的公共无效(动画){
}
@凌驾
onAnimationEnd上的公共无效(动画){
v、 clearAnimation();
RelativeLayout.LayoutParams params=(LayoutParams)v
.getLayoutParams();
params.leftMargin=0;
params.rightMargin=0;
v、 setLayoutParams(参数);
}
});
v、 startAnimation(托勒夫特);
}
否则{
Animation toRigh=新的TranslateAnimation(0,-v.getWidth()-72,0,0);
设置持续时间(animDuration);
setAnimationListener(新的AnimationListener(){
@凌驾
onAnimationStart上的公共无效(动画){
}
@凌驾
onAnimationRepeat上的公共无效(动画){
}
@凌驾
onAnimationEnd上的公共无效(动画){
v、 clearAnimation();
RelativeLayout.LayoutParams params=(LayoutParams)v
.getLayoutParams();
params.leftMargin=(int)-(v.getWidth()-v.getWidth()*.15f);
params.rightMargin=(int)(v.getWidth()*.85f);
v、 setLayoutParams(参数);
}
});
v、 startAnimation(托里);
}
}
专用void滑回(最终视图v){
如果(v.getLeft()!=0){
Animation toLeft=新的TranslateAnimation(-v.getLeft(),0,0,0);
toLeft.setDuration(animDuration+100);
toLeft.setAnimationListener(新的AnimationListener(){
@凌驾
onAnimationStart上的公共无效(动画){
}
@凌驾
onAnimationRepeat上的公共无效(动画){
}
@凌驾
onAnimationEnd上的公共无效(动画){
v、 clearAnimation();
RelativeLayout.LayoutParams params=(LayoutParams)v
.getLayoutParams();
params.leftMargin=0;
params.rightMargin=0;
v、 setLayoutParams(参数);
}
});
v、 startAnimation(托勒夫特);
}
}
@凌驾
公共布尔onTouch(视图v,运动事件){
if(event.getAction()==MotionEvent.ACTION\u向下){
xPos=(int)event.getX();
}
if(event.getAction()==MotionEvent.ACTION\u MOVE){
RelativeLayout.LayoutParams params=(LayoutParams)v.getLayoutParams();
如果(参数rightMargin+1>0){
params.leftMargin=(int)(event.getRawX()-xPos);
params.rightMargin=(int)(-event.getRawX()+xPos);
v、 setLayoutParams(参数);
}
}
if(event.getAction()==MotionEvent.ACTION\u UP){
RelativeLayout.LayoutParams params=(LayoutParams)v.getLayoutParams();
if(params.rightMargin
}

我很漂亮