gpt4 book ai didi

android - 结合移动翻译+ Activity 过渡动画

转载 作者:行者123 更新时间:2023-11-30 02:22:59 30 4
gpt4 key购买 nike

我想做的事情:

假设我在屏幕的右上角有一个 imageView。

一个。当我点击它时,它会移动/平移到屏幕中心

B.然后它应该使用 SharedElement Transition 动画化到新 Activity 中

我可以使用 LINK 做 A和 B 使用 LINK

2 个问题

  1. 我做对了吗

  2. 如何组合A和B

在乔治的回答之后

v21/themes.xml

<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowSharedElementExitTransition">@transition/exit_slide_transition</item>
<item name="android:windowSharedElementEnterTransition">@transition/enter_transition</item>

</style>
</resources>

exit_slide_transition.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds
android:duration="1000"
android:interpolator="@android:anim/linear_interpolator"/>
</transitionSet>

linear.xml (由 AnimationUtils.loadAnimation 使用)

<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<translate
android:fromYDelta="0"
android:toYDelta="45%p"
android:fromXDelta="0"
android:toXDelta="45%p"
android:duration="1000"/>
</set>

enter_transition.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeImageTransform/>
</transitionSet>

启动 Activity + moveImage():

//StartActivity:

ActivityOptionsCompat options =
ActivityOptionsCompat.makeSceneTransitionAnimation(
activity, transitionView, EXTRA_IMAGE);
Intent intent = new Intent(activity, DetailActivity.class);
intent.putExtra(EXTRA_IMAGE, url);
ActivityCompat.startActivity(activity, intent, options.toBundle());

//moveImage():

RelativeLayout.LayoutParams layoutParams=new RelativeLayout.LayoutParams((int)getResources().getDimension(R.dimen.my_image_dp),(int)getResources().getDimension(R.dimen.my_image_dp));
layoutParams.addRule(RelativeLayout.CENTER_VERTICAL,RelativeLayout.TRUE);
layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL,RelativeLayout.TRUE);
imageView.setLayoutParams(layoutParams);

最佳答案

根据我在链接中读到的内容,您正在尝试直接使用 Animators 制作初始动画。可以通过使用 Animator Listener (onAnimationEnd) 启动 Activity 来执行此操作,但我猜这不是您的想法。

“正确”的方法是使用 SharedElementExitTransition 在转换到新 Activity 之前移动 View 。您可以使用 ChangeTransform 或 ChangeBounds 来移动它,具体取决于您修改的属性(翻译或位置)。

本质上:

startActivity(intent, bundle);
moveImage();

这将导致共享元素的退出过渡根据您在移动图像中所做的将其置于最终位置来运行。当它完成时,已启动的 Activity 将接收它并使用其共享元素进入转换将其移动到最终位置。

编辑:

如果你只是调整布局参数,看起来你需要强制父 View 的布局。我还不确定为什么这是必要的。调用 setLayoutParams 后,添加:

    View parent = (View) imageView.getParent();
int widthSpec = View.MeasureSpec.makeMeasureSpec(parent.getWidth(), View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(parent.getHeight(), View.MeasureSpec.EXACTLY);
parent.measure(widthSpec, heightSpec);
parent.layout(parent.getLeft(), parent.getTop(), parent.getRight(), parent.getBottom());

您也可以直接更改 ImageView 的左/上/右/下。

关于android - 结合移动翻译+ Activity 过渡动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227221/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com