`

点击打开进入应用的动画(点击非Android View)

阅读更多

android点击一个View进入一个应用,通常会有好几种动画,可以通过xml控制,也可以通过其内部提供的ActivityOptions类来控制。那么最近我们的载体(一个桌面)需要使用ActivityOptions.makeScaleUpAnimation的动画方式来进入一个应用,如果我们点击的是一个View v,那么正常的程序可以是酱紫:

Intent intent = 。。。
int[] pos = new int[2];
v.getLocationOnScreen(pos);
intent.setSourceBounds(new Rect(pos[0], pos[1], pos[0] + v.getWidth(), pos[1] + v.getHeight()));
ActivityOptions opts = ActivityOptions.makeScaleUpAnimation(v, 0, 0, v.getMeasuredWidth(),
                        v.getMeasuredHeight());
 startActivity(intent, opts.toBundle());

 上述效果就是点击一个图标(一个View)然后就进入到一个应用,中间的这个过程的动画效果就是伤处的opts控制滴,所以这种方法还是蛮简单的。那么问题来了,我点击的不是View怎么办?其实在桌面上的东西都是View,只不过我们的东西有点特别,opengl实现的,整体的内容是一个View,但是内部的空间没有一个是View的子类,那怎么办咯?例如amigo随变桌面里的创意时钟就是酱紫的,这整张图是一个View,内部的却不是View,又要求以点击的部位弹出应用,而不是以整个View弹出:


首先可以看到startActivity的第一个参数intent需要的内容,它就是需要4个int类型的值,而且分别是左上角的x坐标,左上角的y坐标,长度,宽度,好吧,这4个值都可以自己给值了。

再看到startActivity的第二个参数,一个Bundle对象,然后我们就进入到了ActivityOptions的源码看到toBundle方法,其实就是要传一些键值对:

 public Bundle toBundle() {
        if (mAnimationType == ANIM_DEFAULT) {
            return null;
        }
        Bundle b = new Bundle();
        if (mPackageName != null) {
            b.putString(KEY_PACKAGE_NAME, mPackageName);
        }
        b.putInt(KEY_ANIM_TYPE, mAnimationType);
        switch (mAnimationType) {
            case ANIM_CUSTOM:
            case ...
...
}

        return b;
    }

  再看makeScaleUpAnimation方法:

    public static ActivityOptions makeScaleUpAnimation(View source,
            int startX, int startY, int width, int height) {
        ActivityOptions opts = new ActivityOptions();
        opts.mPackageName = source.getContext().getPackageName();
        opts.mAnimationType = ANIM_SCALE_UP;
        int[] pts = new int[2];
        source.getLocationOnScreen(pts);
        opts.mStartX = pts[0] + startX;
        opts.mStartY = pts[1] + startY;
        opts.mWidth = width;
        opts.mHeight = height;
        return opts;
    }

 可以看到这个View v的作用:1.获取当前应用的包名;2.获取这个view在屏幕上的左上角的坐标

结合上述两个源码,我们再次进入到toBundle,找到mAnimationType = ANIM_SCALE_UP需要的简直对:

 

b.putString(KEY_PACKAGE_NAME, mPackageName);//这个自己可以获取
  b.putInt(KEY_ANIM_TYPE, mAnimationType);//ANIM_SCALE_UP常量
 case ANIM_SCALE_UP:
                b.putInt(KEY_ANIM_START_X, mStartX);
                b.putInt(KEY_ANIM_START_Y, mStartY);
                b.putInt(KEY_ANIM_WIDTH, mWidth);
                b.putInt(KEY_ANIM_HEIGHT, mHeight);
     break;

 好吧,由此可见需要的键值对一共有6个,另外需要的就是动画起始的坐标和初始框框的长度与宽度,其中长度和宽度我们可以自己给个固定的值,那么接下来就是mStartX和mStartY怎么获取?

 

其实它的源码写的很清楚了

 

 int[] pts = new int[2];
View.getLocationOnScreen(pts);

 通过上述方法可以得到一个View控制的左上角的坐标,但是这里的值并非我们想要的,我们需要点击例如上图的右下角那个图标呢? 不可能以整个View来弹出吧,所以还需要详细的点击的坐标。好在onTouchEvent(MotionEvent event)中的event可以得到当前点击的view中的坐标

 

event.getX()得到该点击在View中的坐标,又View在屏幕上的左上角的坐标是pts[0],那就是说 x=event.getX()+pts[0]就是我所点击的点在屏幕上的x坐标,由此y=event.getY()+pts[1]是我所点击的点在屏幕上的Y坐标,再给个定值长度和宽度=20,那就可以得到想要的Bundle了。

 

 Bundle b = new Bundle();
 b.putString(KEY_PACKAGE_NAME, packageName);
 b.putInt(KEY_ANIM_TYPE, ANIM_SCALE_UP);
 b.putInt(KEY_ANIM_START_X, x);
 b.putInt(KEY_ANIM_START_Y, y);
 b.putInt(KEY_ANIM_WIDTH, constVlaue);
 b.putInt(KEY_ANIM_HEIGHT, constVlaue);

 

Context.startActivity(intent, b);

 好吧,虽然废话了一大把,但还是写出来作为一个记录,让自己以后养成查看源码的习惯,不要害怕,,,

 

1
0
分享到:
评论

相关推荐

    Android浏览书籍的层叠翻页动画效果

    在Android开发中,实现书籍的层叠翻页动画效果是一项常见的需求,特别是在设计电子阅读应用时,这样的平滑翻页体验能极大地提升用户的阅读感受。本文将深入探讨如何利用Android SDK中的工具和技术来创建这样的动画...

    Android_gif应用启动动画

    在Android开发中,应用启动动画(Splash Screen)是用户打开应用程序时首先看到的短暂界面,通常用来展示品牌标识、加载应用资源或者进行一些初始化操作。本文将深入探讨如何实现一个基于GIF的Android应用启动动画,...

    Android数百种动画效果源码

    "BaseAnimation数百种动画效果源码"这个资源包含了大量用于Android应用的动画效果实现,这对于开发者来说是一份宝贵的参考资料。下面我们将深入探讨Android动画体系以及这些源码可能涵盖的知识点。 1. **属性动画...

    android打开activity动画(上下左右旋转等方式)

    首先,Android中的动画分为两种类型:视图动画(View Animation)和属性动画(Property Animation)。视图动画主要用于2D效果,如平移、旋转、缩放和淡入淡出,而属性动画则更加强大,可以直接改变对象的属性并实时...

    Android模拟开关按钮点击打开动画(属性动画之平移动画)

    在本例中,通过属性动画的使用,我们成功地模拟了开关按钮点击打开的过程,增加了应用的视觉吸引力和用户体验。在实际开发中,开发者可以根据需求自由发挥,利用属性动画实现各种复杂的交互动画。

    Android属性动画实现酷炫登录界面

    - 应用动画:调用start()方法启动动画。 - 监听动画事件:可以注册AnimationListener监听动画的开始、结束和重复事件,以便在合适的时候执行其他操作。 在MyLoginProject这个项目中,开发者已经实现了上述的一些...

    Android-Android自定义View有这些足够了

    6. **属性动画**:Android的属性动画系统允许在运行时改变View的属性,创建出流畅的过渡效果。 7. **MeasureSpec**:理解和熟练运用MeasureSpec是自定义View时的一大挑战。MeasureSpec包含尺寸的约束信息,用于在...

    安卓动画效果相关-Android仿窗帘效果和登录界面拖动效果Scroller类的应用.rar

    窗帘效果(Curtain Effect)通常是指一种屏幕从中间向两侧滑动打开或关闭的效果,常用于应用启动画面或者某些特定界面的过渡。在Android中实现这种效果,需要对View的移动进行精确控制,`Scroller`类就起到了关键...

    Android-Andorid实现垃圾桶开关动画

    "Android-Android实现垃圾桶开关动画"这一主题主要聚焦于如何在Android应用中创建一个具有开关功能的垃圾桶图标,并且伴随着生动的动画效果。以下是对这个主题的详细解释: 首先,Android中的动画大致可以分为两种...

    仿android 5.0侧滑菜单按钮的打开与关闭动画

    在Android 5.0(Lollipop)系统中,侧滑菜单的打开与关闭动画更加优雅,增加了用户体验。本知识点将详细探讨如何在Android应用中实现这种仿Android 5.0的侧滑菜单按钮的动画效果。 首先,我们要理解`DrawerLayout`...

    android 饼状报表图 带打开动画和点击变大

    "android 饼状报表图 带打开动画和点击变大"这个主题着重于两个关键点:动画效果和交互性。 首先,让我们来详细探讨饼状图。饼状图通过将整体分割成多个扇形部分,每部分代表一个分类所占的比例,直观地呈现数据...

    仿掌阅的书架的打开和关闭动画

    1. **Android Animation**: 打开和关闭书架的动画效果通常会用到Android系统的视图动画(View Animation)和属性动画(Property Animation)。视图动画主要包括Alpha(透明度)、Scale(缩放)、Translate(平移)和...

    android 扇形菜单(属性动画实现)

    本文将深入探讨如何使用属性动画在Android中实现这种效果。 首先,我们要理解Android属性动画系统的基本概念。属性动画是Android 3.0(API Level 11)引入的一个功能,它允许开发者在没有实际改变视图属性的情况下...

    android AnimationDemo透明伸缩移动旋转等十几个动画特效

    通过实践和调试,开发者可以深入理解Android动画机制,提升应用的交互体验。 总之,`AnimationDemo`是一个全面的Android动画学习资源,涵盖了从基础到高级的各种动画技术。无论是初学者还是经验丰富的开发者,都...

    Android 带有切换动画的CheckBox

    当用户点击CheckBox时,我们需要检测到这一事件并触发动画。在自定义的CheckBox中,我们可以重写onTouchEvent方法来监听触摸事件,当检测到ACTION_DOWN和ACTION_UP时,分别开始和结束动画,并相应地改变CheckBox的...

    android逐帧动画

    这个例子展示了如何在Android应用中实现这种基本的动画效果。 首先,我们需要了解Android中的`Animation`类体系。Android提供了两种主要的动画类型:属性动画(Property Animation)和视图动画(View Animation)。...

    android-pdfview

    这个库使得在Android应用中打开和显示PDF文件变得非常简便。下面我们将深入探讨如何使用这个库以及它背后的关键知识点。 1. **PDF(Portable Document Format)**:PDF是一种通用的文件格式,用于呈现文档,包括...

    Android应用源码之Android Layout UI 首页加载过渡动画,星期变化动画.zip

    "Android应用源码之Android Layout UI 首页加载过渡动画,星期变化动画.zip"这个资源包提供了一个实际的Android应用实例,展示了如何通过源代码实现动态的布局UI和动画效果。以下是基于这个主题的详细知识点: 1. *...

    安卓动画效果相关-Android源码RoadTrip展示强大视觉效果.rar

    Android提供了多种动画机制,包括属性动画(Property Animation)、视图动画(View Animation)以及过渡动画(Transition Animation)。属性动画是Android 3.0(API Level 11)引入的新特性,允许对对象的任意属性...

    安卓动画效果相关-Android中的material-navigation-drawer5.0侧边栏效果.rar

    总的来说,这个压缩包提供了关于如何在Android应用中实现Material Design风格侧边栏动画效果的实践案例。对于初学者,这是一个很好的学习资源,可以从中了解如何结合使用布局、动画和事件处理来创建一个功能完备的侧...

Global site tag (gtag.js) - Google Analytics