共享动画基本使用

    我是看了别人的博客学习的,,大致共享动画分为5.0之前和之后,我这里就只讲5.0之后。5.0之后呢系统就有共享动画的api来快捷使用共享动画。我写贴上我的动画:

   

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView mIv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mIv = (ImageView) findViewById(R.id.iv1);
        mIv.setImageResource(R.mipmap.ic_launcher);

        mIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.
                        makeSceneTransitionAnimation(MainActivity.this, mIv, "img");
                startActivity(intent, optionsCompat.toBundle());
            }
        });
    }
}
就是一个设置了点击事件跳转界面,现在里面的共享参数设置都是这样写的,我里面的"img"就是共享参数,mIv就是共享控件。XML如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:layout_marginTop="20dp"
        android:layout_marginLeft="50dp"
        android:id="@+id/iv1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:transitionName="img" />
</LinearLayout>

注意我XML里面的最后一句话:andorid:transitionName = "img",这个是将控件与共享标记关联起来,也可以用代码设置。然后我的第二个界面SecondActivity代码如下:
 
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sec);
        findViewById(R.id.iv).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
    }


    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finishAfterTransition();
    }
}
 
  activity_sec的XML如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <ImageView
        android:id="@+id/iv"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher"
        android:transitionName="img" />
</RelativeLayout>



  这里面有几个比较注意的地方:
 (1)重写onBackPressed()
 (2)点击返回的事件不要直接调用finish();而是调用onBackPressed()
 (3)这个activity的主题,如下:
  
  <activity
            android:name=".SecondActivity"
            android:screenOrientation="portrait"
            android:theme="@style/app_theme_transparent"/>

 <style name="app_theme_transparent" parent="AppTheme">
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowAnimationStyle">@null</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
    </style>

app的主题:
 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>



在Android中,`FragmentTransaction.addSharedElement()`方法用于实现Fragment之间的共享元素动画。当你在一个Fragment中切换到另一个Fragment时,可以指定哪些视图应该在整个过渡过程中保持可见并应用相同的动画效果。这通常适用于那些在两个Fragment间需要传递状态并且希望展示连续性的场景。 以下是添加共享元素的基本步骤: 1. **设置共享元素**:首先,在你的FragmentA中,找到那些你想在切换到FragmentB时保持状态和动画的视图,例如: ```java View sharedView = findViewById(R.id.shared_view); ``` 2. **开始交易**: - 创建一个新的`FragmentTransaction`实例: ```java FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); ``` 3. **添加共享元素**: - 使用`addSharedElement()`方法,传入共享的视图、目标Fragment以及一个描述动画路径的`Transition`对象: ```java transaction.addSharedElement(sharedView, "shared_element_key", transition); ``` `transition`是一个自定义的`Transition`对象,你可以使用`TransitionSet`来组合不同的动画效果。 4. **执行交易**: - 添加必要的操作(如替换当前Fragment),然后提交事务: ```java FragmentB fragmentB = new FragmentB(); transaction.replace(R.id.container, fragmentB); transaction.commitAllowingStateLoss(); ``` 5. **在目标Fragment中处理共享元素**: - 在FragmentB的`onCreateView()`或`onStartTransition()`方法中,通过`requireEnterTransition()`或`requireExitTransition()`获取共享动画,并应用它: ```java requireTransition().addTarget(sharedView.getId(), sharedView); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值