最近项目中有一个需求,需要在展示新页面的时候将图片类似探探的转场动画。
先来一张效果图
刚看到需求的时候也是一脸懵逼,之前看过这种效果但是并没有做过,查了一番资料后终于搞定了。下面来简单说一个这个原理。
这是在api 5.0之后加入的转场动画。我并没有深入研究他的原理和构成。只是会简单使用一下。这里简单写下使用的方式
项目源码已上传至GitHub https://github.com/krisSoumns/TestDialog
下面是部分源码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="cn.com.testdialog.MainActivity"> <ImageView android:id="@+id/iv" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:onClick="click" android:scaleType="fitStart" android:src="@drawable/icon_3" /> </FrameLayout>
MainActivity.class
package cn.com.testdialog; import android.annotation.TargetApi; import android.app.ActivityOptions; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { //需要进行共享的view private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public void click(View view) { Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show(); //将view传入,最后一个参数为标识 ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, iv, "iv"); startActivity(new Intent(MainActivity.this, Main2Activity.class), options.toBundle()); } }
此段代码中"iv" 这个标识最为重要,需要使用这个标识来区分哪一个view与传递的view进行共享,即实现转场动画切效果如图。
activity_main_2.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" tools:context="cn.com.testdialog.Main2Activity"> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="wrap_content" android:transitionName="iv"> </android.support.v4.view.ViewPager> </RelativeLayout>
此段代码中 android:transitionName 属性的值为前一个activity中以参数形式传递过来的"iv",我这里需要进行共享的是一个viewPager,经测试viewPager是可以进行共享的, 在 Main2Activity.class 中不需做任何处理即可。
注此种方法仅适用5.0及以上版本。
转载请标注出处:http://blog.csdn.net/soumns_kris/article/details/78031608