打赏

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>
复制代码

 

posted @   YY2000  阅读(207)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示