页面转场基本过渡动画

注:要Android 5.0 及以上才支持

1、设置支持动画

在styles里里面设置



    
    


2、定义动画
         // 侧滑动画
        Slide transition = new Slide();
        transition.setSlideEdge(Gravity.LEFT);
        // 爆炸效果的动画
        Explode transition2 = new Explode();
        // 渐变动画
        Fade transition3 = new Fade();
        transition.setDuration(getResources().getInteger(R.integer.anim_duration_long));
        transition2.setDuration(getResources().getInteger(R.integer.anim_duration_long));
        transition3.setDuration(getResources().getInteger(R.integer.anim_duration_long));

3、设置动画
        getWindow().setExitTransition(transition); //跳转时的退出时动画
        getWindow().setReenterTransition(transition2); //重新进入时动画
        getWindow().setEnterTransition(transition); //进入时的动画
        getWindow().setReturnTransition(transition2); //返回时的退出动画
4、页面跳转

Pair是共享动画的共享元素,没有共享动画元素 可不传,下面再说共享动画

 //Pair是共享动画的共享元素,没有共享动画元素 可不传
 Pair[] pairs = TransitionHelper.createSafeTransitionParticipants(this, false, new Pair(tv1, tv1.getTransitionName()));
                ActivityOptionsCompat aoc = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pairs);
                startActivity(new Intent(this, TwoActivity.class), aoc.toBundle());

上面用到的工具类,主要是处理状态栏和导航栏是否也要跟着动画

/**
 * Wing_Li
 * 2016/9/14.
 * 共享过渡动画加入状态栏和导航栏,这样页面转场动画时 状态栏和导航栏 不会跟着动
 */
public class TransitionHelper {
    /**
     * 创建所需的活动过渡期间避免与系统UI小过渡的参与者。
     *
     * @param activity         The activity used as start for the transition.
     * @param includeStatusBar 如果是错误的,状态栏将不会被添加为过渡参与者
     * @return All transition participants.
     */
    public static Pair[] createSafeTransitionParticipants(@NonNull AppCompatActivity activity, boolean
            includeStatusBar, @Nullable Pair... otherParticipants) {
        // Avoid system UI glitches as described here:
        // https://plus.google.com/+AlexLockwood/posts/RPtwZ5nNebb
        View decor = activity.getWindow().getDecorView();
        View statusBar = null;
        if (includeStatusBar) {
            statusBar = decor.findViewById(android.R.id.statusBarBackground);
        }
        View navBar = decor.findViewById(android.R.id.navigationBarBackground);

        // 创建一对过渡参与者。
        List participants = new ArrayList<>(3);
        addNonNullViewToTransitionParticipants(statusBar, participants);
        addNonNullViewToTransitionParticipants(navBar, participants);
        // only add transition participants if there's at least one none-null element
        // 只有添加过渡参与者,如果至少有一个非空元素
        if (otherParticipants != null && !(otherParticipants.length == 1 && otherParticipants[0] == null)) {
            participants.addAll(Arrays.asList(otherParticipants));
        }
        return participants.toArray(new Pair[participants.size()]);
    }

    private static void addNonNullViewToTransitionParticipants(View view, List participants) {
        if (view == null) {
            return;
        }
        participants.add(new Pair<>(view, view.getTransitionName()));
    }

}

至此,已经实现了基本的转场过渡动画了,
添加共享动画元素 :

两个控件的属性android:transitionName 的值 一样即可:

页面转场基本过渡动画_第1张图片
1.png

你可能感兴趣的:(页面转场基本过渡动画)