android Activity之间专场效果
第一种:自己编写进出效果 然后给activity加上就ok了 例如:(首先要在res文件夹下建立anim文件夹,然后把动画效果xml文件放到里面去)
1.放大进入,
zoomin.xml:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="0.1" android:toXScale="1.0" android:fromYScale="0.1" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p" android:duration="300" /> <!-- 这里为了看到动画演示效果,把动画持续时间设为3秒 --> <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="300" />
缩小退出
zoomout.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/decelerate_interpolator" android:zAdjustment="top"> <scale android:fromXScale="1.0" android:toXScale=".5" android:fromYScale="1.0" android:toYScale=".5" android:pivotX="50%p" android:pivotY="50%p" android:duration="300" /> <!-- 系统内置的动画持续时间 android:duration="@android:integer/config_mediumAnimTime" --> <alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="300"/> </set>
MainActivity.java:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_1);
overridePendingTransition(R.anim.zoomin, R.anim.zoomout);
//overridePendingTransition(R.anim.alphain, R.anim.alphaout);
//overridePendingTransition(R.anim.move_in_right, R.anim.move_out_right);
//overridePendingTransition(R.anim.move_in_left, R.anim.move_out_left);
}
完成!
第二种:
第一步:在 Activity 中的 setContentView(); 方法前加入:
//在需要启动的 activity 中开启动画的特征
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
或者,在 AnimationActivity 中设置如下 style,并引用到 AnimationActivity 即可。
<item name=”android:windowContentTransitions”>true</item>
第二步:在 Activity 中的 setContentView(); 方法前加入一行代码:
//进入效果3选1 getWindow().setEnterTransition(new Explode());//分解 是从屏幕中间进或者出,然后将视图移动至最后位置,达到动画的效果 //getWindow().setEnterTransition(new Slide());//滑动 是从屏幕边缘进出,同理通过移动视图形成动画 //getWindow().setEnterTransition(new Fade());//淡进淡出 是通过改变视图的透明度来达到动画效果 //退出效果3选1 getWindow().setExitTransition(new Explode()); //getWindow().setExitTransition(new Slide()); //getWindow().setExitTransition(new Fade());
第三步:把跳转代码改为这种 startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
简单的跳转效果已经完成 如果需要共享元素的话
例如,我的例子中两个页面都有一个同样内容的 textview ,所以要使其得到共享。
<!– 共享元素必须添加 transitionName 属性,且对应的元素 name 值一致 –>
<android.support.v7.widget.AppCompatTextView
android:id=”@+id/tv_shared_element”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_gravity=”bottom”
android:layout_marginTop=”56dp”
android:layout_marginBottom=”72dp”
android:gravity=”center_horizontal”
android:text=”@string/app_txt”
android:textColor=”#323232″
android:textSize=”18sp”
android:transitionName=”shared element”
tools:ignore=”UnusedAttribute” />
注意:我们必须为两个页面的共同元素(textview)设置一个属性:
android:transitionName=”shared element”
并且必须保证两个 textview 的 transitionName 设置的内容一致,否者将无法达到共享元素的动画效果。
最后的关键一步:更改 startActivity(); 参数内容,因为我们设定了共享元素,所以到进行指定,这样 startActivity 时才能够找到目标,所以启动 activity 的代码因改为这样:
//这里的 sharedElementName 必须与 xml 文件中设置的值一致,否则无法共享
// tvSharedElement 表示要参与共享的 view
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, tvSharedElement,
“shared element”).toBundle());
如果你的两个 activity 中有两个及以上的内容需要共享元素动画时,你只需要修改代码为:
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create((View) tvSharedElement, ”shared element”))
.toBundle());
这里通过 Pair.create(view,”shared name”);来传入需要共享的元素。
好了,本篇关于 android5.x 提供的几种过渡动画效果就展示完了,虽然过渡动画效果很漂亮,但是也要合理的运用,也不能每一个 activity 都设置过渡动画。那么,如上动态图演示的一样,本案例关键代码将在下面贴出:
案例代码
MainActivity 代码如下:
import android.annotation.SuppressLint; import android.app.ActivityOptions; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.AppCompatButton; import android.support.v7.widget.AppCompatTextView; import android.util.Pair; import android.view.View; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @SuppressLint(“NewApi”) public class MainActivity extends AppCompatActivity { @BindView(R.id.btn_explode) AppCompatButton btnExplode; @BindView(R.id.btn_slide) AppCompatButton btnSlide; @BindView(R.id.btn_fade) AppCompatButton btnFade; @BindView(R.id.tv_shared_element) AppCompatTextView tvSharedElement; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.btn_explode) void onExplodeClick() { Intent intent = new Intent(this, AnimationsActivity.class); startActivityWithAnimation(intent, ”explode”); } @OnClick(R.id.btn_slide) void onSlideClick() { Intent intent = new Intent(this, AnimationsActivity.class); startActivityWithAnimation(intent, ”slide”); } @OnClick(R.id.btn_fade) void onFadeClick() { Intent intent = new Intent(this, AnimationsActivity.class); startActivityWithAnimation(intent, ”fade”); } private void startActivityWithAnimation(Intent intent, String animType) { intent.putExtra(“anim”, animType); //这里的 sharedElementName 必须与 xml 文件中设置的值一致,否则无法共享 // tvSharedElement 表示要参与共享的 view // startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, tvSharedElement, // ”shared element”).toBundle()); startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, Pair.create((View) tvSharedElement, ”shared element”)) .toBundle()); } }
MainActivity 布局文件我就不贴出来了,就三个 Button 和一个 TextView,最后我会给出本案例完整代码的资源链接,大家若不懂可以去下载来参考。
接着是 AnimationsActivity 的代码,这是一个开启动画的 Activity ,代码如下:
import android.annotation.SuppressLint; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.AppCompatTextView; import android.transition.Explode; import android.transition.Fade; import android.transition.Slide; import android.view.Window; import butterknife.BindView; import butterknife.ButterKnife; @SuppressLint(“NewApi”) public class AnimationsActivity extends AppCompatActivity { @BindView(R.id.tv_anim_type) AppCompatTextView tvAnimType; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在需要启动的 activity 中开启动画的特征 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS); setContentView(R.layout.activity_animations); ButterKnife.bind(this); setEnterAnim(); } @SuppressWarnings(“ConstantConditions”) private void setEnterAnim() { final String animType = (String) getIntent().getExtras().get(“anim”); tvAnimType.setText(animType); switch (animType) { case ”explode”: getWindow().setEnterTransition(new Explode()); break; case ”slide”: getWindow().setEnterTransition(new Slide()); break; case ”fade”: getWindow().setEnterTransition(new Fade()); break; } } }
AnimationsActivity 布局文件如下,我觉得还是有必要贴出来:
<?xml version=”1.0″ encoding=”utf-8″?> <android.support.design.widget.CoordinatorLayout xmlns:android=”http://schemas.android.com/apk/res/android” xmlns:app=”http://schemas.android.com/apk/res-auto” xmlns:tools=”http://schemas.android.com/tools” android:layout_width=”match_parent” android:layout_height=”match_parent”> <android.support.v7.widget.ContentFrameLayout android:id=”@+id/frame” android:layout_width=”match_parent” android:layout_height=”280dp” android:background=”#ff3312″> <android.support.v7.widget.AppCompatTextView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_gravity=”center” android:text=”https://blog.csdn.net/smile_Running” android:textColor=”#ffffff” android:textSize=”20sp” tools:ignore=”HardcodedText” /> </android.support.v7.widget.ContentFrameLayout> <!– anchor 属性必须在 CoordinatorLayout 下一级才能生效 –> <android.support.design.widget.FloatingActionButton android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:src=”@drawable/ic_person_add_black_24dp” app:elevation=”8dp” app:layout_anchor=”@id/frame” app:layout_anchorGravity=”bottom|right” /> <android.support.design.widget.FloatingActionButton android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:src=”@drawable/ic_sentiment_satisfied_black_24dp” app:elevation=”8dp” app:layout_anchor=”@id/frame” app:layout_anchorGravity=”bottom|left” /> <android.support.v7.widget.CardView android:layout_width=”220dp” android:layout_height=”120dp” app:cardBackgroundColor=”#ffdd55″ app:cardCornerRadius=”24dp” app:cardElevation=”8dp” app:layout_anchor=”@id/frame” app:layout_anchorGravity=”bottom|center_horizontal”> <android.support.v7.widget.AppCompatTextView android:id=”@+id/tv_anim_type” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_gravity=”center” android:text=”animations” android:textColor=”#ffffff” android:textSize=”25sp” tools:ignore=”HardcodedText” /> </android.support.v7.widget.CardView> <android.support.v7.widget.AppCompatTextView android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:layout_gravity=”bottom” android:layout_marginBottom=”72dp” android:gravity=”center_horizontal” android:text=”@string/app_txt” android:textColor=”#323232″ android:textSize=”18sp” android:transitionName=”shared element” tools:ignore=”UnusedAttribute” /> </android.support.design.widget.CoordinatorLayout>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通