android– 通过从右向左滑动以平滑动画关闭一个活动以转到第二个活动

android– 通过从右向左滑动以平滑动画关闭一个活动以转到第二个活动,第1张

概述我想有一个介绍应用程序的活动,并且要关闭你必须从右向左滑动它(如果没有太多的工作,可能会有一个平滑的动画),那么我已经拥有应用程序的另一部分,即ActionBar标签滑动视图.我已经阅读了一些像implementSwipeViews这样的Android指南,但它们不是我的情况.请问你能帮帮我吗?[使用“

我想有一个介绍应用程序的活动,并且要关闭你必须从右向左滑动它(如果没有太多的工作,可能会有一个平滑的动画),那么我已经拥有应用程序的另一部分,即Actionbar标签滑动视图.我已经阅读了一些像implement Swipe Views这样的AndroID指南,但它们不是我的情况.
请问你能帮帮我吗?
[使用“平滑动画”我的意思是滑动必须跟随手指]

解决方法:

我通常使用手势监听器来实现这一点:

首先,在res / anim中定义翻译动画:

slIDe_in_left.xml:

<set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <translate androID:fromXDelta="-50%p" androID:toXDelta="0"            androID:duration="@androID:integer/config_longAnimTime"/>    <Alpha androID:fromAlpha="0.0" androID:toAlpha="1.0"            androID:duration="@androID:integer/config_mediumAnimTime" /></set>

slIDe_in_right.xml:

    <set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <translate androID:fromXDelta="50%p" androID:toXDelta="0"            androID:duration="@androID:integer/config_longAnimTime"/>    <Alpha androID:fromAlpha="0.0" androID:toAlpha="1.0"            androID:duration="@androID:integer/config_mediumAnimTime" /></set>

slIDe_out_left.xml:

<set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <translate androID:fromXDelta="0" androID:toXDelta="-50%p"            androID:duration="@androID:integer/config_longAnimTime"/>    <Alpha androID:fromAlpha="1.0" androID:toAlpha="0.0"            androID:duration="@androID:integer/config_mediumAnimTime" /></set>

slIDe_out_right.xml:

<set xmlns:androID="http://schemas.androID.com/apk/res/androID">    <translate androID:fromXDelta="0" androID:toXDelta="50%p"            androID:duration="@androID:integer/config_mediumAnimTime"/>    <Alpha androID:fromAlpha="1.0" androID:toAlpha="0.0"            androID:duration="@androID:integer/config_mediumAnimTime" /></set>

然后在您当前的活动类中:

class MyGestureDetector extends SimpleOnGestureListener {        @OverrIDe        public boolean onFling(MotionEvent e1, MotionEvent e2, float veLocityX,                float veLocityY) {            try {                float slope = (e1.getY() - e2.getY()) / (e1.getX() - e2.getX());                float angle = (float) Math.atan(slope);                float angleInDegree = (float) Math.todegrees(angle);                // left to right                if (e1.getX() - e2.getX() > 20 && Math.abs(veLocityX) > 20) {                    if ((angleInDegree < 45 && angleInDegree > -45)) {                              startActivity(new Intent(CurrentActivitiy.this, NextActivity.class);         CurrentActivity.this.overrIDePendingTransition(            R.anim.slIDe_in_left, R.anim.slIDe_out_right);         finish();        }                    // right to left fling                } else if (e2.getX() - e1.getX() > 20                        && Math.abs(veLocityX) > 20) {                    if ((angleInDegree < 45 && angleInDegree > -45)) {        startActivity(new Intent(CurrentActivitiy.this, NextActivity.class);         CurrentActivity.this.overrIDePendingTransition(            R.anim.slIDe_in_right, R.anim.slIDe_out_left);         finish();                    }                }                return true;            } catch (Exception e) {                // nothing            }            return false;        }    }

然后,您可以注册任何视图以接收/收听手势:

 final GestureDetector  gestureDetector = new GestureDetector(new MyGestureDetector());         //the parent layout                   findVIEwByID(R.ID.parent_layout).setontouchListener(new VIEw.OntouchListener() {                    @OverrIDe                    public boolean ontouch(VIEw v, MotionEvent event) {                        if (gestureDetector.ontouchEvent(event)) return false;                        return false;                    }                });         //an image vIEw        findVIEwByID(R.ID.image_vIEw).setontouchListener(new VIEw.OntouchListener() {                    @OverrIDe                    public boolean ontouch(VIEw v, MotionEvent event) {                        if (gestureDetector.ontouchEvent(event)) return false;                        return false;                    }                });        // a text vIEw        findVIEwByID(R.ID.text_vIEw).setontouchListener(new VIEw.OntouchListener() {                    @OverrIDe                    public boolean ontouch(VIEw v, MotionEvent event) {                        if (gestureDetector.ontouchEvent(event)) return false;                        return false;                    }                });
总结

以上是内存溢出为你收集整理的android – 通过从右向左滑动以平滑动画关闭一个活动以转到第二个活动全部内容,希望文章能够帮你解决android – 通过从右向左滑动以平滑动画关闭一个活动以转到第二个活动所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存