Android中Activity切换时共享视图元素的切换动画(5.0以上)

同时发布在我的博客

点此进入

背景

说来这个的背景非常简单,经常在使用图片列表的时候就会想,如果“列表中的图片放大到整个屏幕”作为 Activity 的补间动画,就非常完美了。就像这样:

Android 5.0 Lollipop 的 SDK 发布以后,这个新的主题包含在 AppCompat-v7 21了。

这里介绍的实现方法是 ActivityOptionsCompat.makeSceneTransitionAnimation , 缺点是只能在5.0上才可以看到效果,在5.0以下只能确保程序不出错。

实现

首先要在 AndroidManifest.xml 中为需要这种动画的 Activity 开启这个功能,为此我字节写了一个 style。

<style name="AnimationActivity">
<item name="android:windowContentTransitions">true</item>
</style>

先来造一个浏览界面,关键是设置共享的视图元素的两个地方

public class ViewerActivity extends AppCompatActivity {

    public static void launch(AppCompatActivity activity, View transitionView, int resId) {
        Intent intent = new Intent(activity, ViewerActivity.class);
        intent.putExtra("resId", resId);

        // 这里指定了共享的视图元素
        ActivityOptionsCompat options = ActivityOptionsCompat
                .makeSceneTransitionAnimation(activity, transitionView, "image");

        ActivityCompat.startActivity(activity, intent, options.toBundle());
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_viewer);
        ImageView imageView = (ImageView) findViewById(R.id.image);
        imageView.setImageResource(getIntent().getIntExtra("resId", R.mipmap.pic_1));

        // 这里指定了被共享的视图元素
        ViewCompat.setTransitionName(imageView, "image");
    }

}

然后启动上边写好的浏览界面

ViewerActivity.launch(MainActivity.this, v, data.get(position).resId);

我知道上面写得比较简单,所以我就准备了,

伸手党的福利:点我跳转代码地址

更多

上面的方法非常简单,但是却只能在 5.0 的版本上显示出效果,对于现在大部分手机还是 4.x 的情况来说,无疑是不能上线的。下一篇文章将会讨论如何在 4.x 上实现同样的效果,敬请期待。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 04:33:51

Android中Activity切换时共享视图元素的切换动画(5.0以上)的相关文章

Android中Activity切换时共享视图元素的切换动画(4.x兼容方案)

同时发布在我的博客 点此进入 开始 上一篇讲了使用 Google 的 AppCompat-v7 来实现 Activity 切换时实现共享视图元素的切换动画.这一篇介绍两个可以兼容 4.x 的两个第三方方案. 上一篇:Android中Activity切换时共享视图元素的切换动画(5.0以上) 方案一:PreLollipopTransition 首先在 build.gradle 配置文件添加这个库依赖 dependencies { compile 'com.kogitune:pre-lollipop

Android中Activity运行时屏幕方向与显示方式详解

现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运行时的屏幕方向.还有就是在我们用手机观看视频时,随意的进行横竖屏切换,但播放进度不会随着屏幕的转换而从头开始播放,为了实现这个功能,我们就需要在Activity转换时对当前数据进行保存. 现在根据以上两种需求,个人提出以下解决方案: 一.锁定Activity运行时屏幕方向,如下图(演示锁定横屏):

Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面

其实这是很简单的一个问题.但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中, 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算.人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底.向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称为出栈或退栈,它是把栈

Android中Activity启动模式详解

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的四种启动模式:

Android 中 Activity 启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" /> Activity的启动模式分为四种: 1. standard 在standard模式(

android 中activity 属性说明(转载)

转自:http://liuwuhen.iteye.com/blog/1759796 activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌握activity中的其 他设置. 1.activity 中主题的设置   android中我们可以通过AndroidManifest.xml中设置activity中的主题,其实android提供了许多自带的主题样式,如下: android:theme="@android:style/Theme.D

Android进阶笔记08:Android 中Activity、Window和View之间的关系

1. Android 中Activity.Window和View之间的关系(比喻): Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutInflater像剪刀,Xml配置像窗花图纸.  2. 详解:       Activity是Android应用程序的载体,允许用户在其上创建一个用户界面,并提供用户处理事件的API,如onKeyEvent, onTouchEvent等. 并维护应用程序的生命周期.Activity本身是个庞大的载体,

转-android 中activity 属性说明

activity是android中使用非常平凡的一种组件,我们除了需要掌握activity中的生命周期以外,还需要掌握activity中的其 他设置. 1.activity 中主题的设置   android中我们可以通过AndroidManifest.xml中设置activity中的主题,其实android提供了许多自带的主题样式,如下: android:theme="@android:style/Theme.Dialog"   将一个Activity显示为能话框模式 android:

Android中Activity的四种启动方式

谈到Activity的启动方式必须要说的是数据结构中的栈.栈是一种只能从一端进入存储数据的线性表,它以先进后出的原则存储数据,先进入的数据压入栈底,后进入的数据在栈顶.需要读取数据的时候就需要从顶部开始读取数据,栈具有记忆功能,对栈的操作不需要指针的约束.在Android中Activity的显示其实就是一个入栈和出栈的过程.当打开一个Activity的时候Activity入栈,当关闭一个Activity的时候Activity出栈,用户操作的Activity位于栈顶,一般情况下,一个应用程序对应一