当前位置: 首页 > 知识库问答 >
问题:

组合移动转换活动转换动画

赵君植
2023-03-14

我想做的是:

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

A.当我点击它时,它会移动/平移到屏幕中央

B.然后,它应该使用 SharedElement Transition 动画化为新活动

我可以用LINK做A,用LINK做B

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>
    

    输入转换.xml

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

    启动活动移动图像():

    //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);
    
  • 共有1个答案

    张高义
    2023-03-14

    从我在链接中读到的内容来看,您正在尝试直接使用动画器进行初始动画。可以通过使用动画监听器(on动画结束)来启动活动来做到这一点,但我猜这不是您的想法。

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

    本质上:

    startActivity(intent, bundle);
    moveImage();
    

    这将导致共享元素的退出转换根据您在移动图像中的操作运行,以将其置于最终位置。完成后,启动的活动将使用其共享元素进入转换将其移动到最终位置。

    编辑:

    如果您只是调整布局参数,则看起来需要强制父视图的布局。我还不确定为什么这是必要的。调用 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的左/上/右/下。

     类似资料:
    • 我使用活动识别api和活动转换。当我第一次运行应用程序时,第一个转换总是。在这个应用程序中,它是。当我在中仅使用和时,它是。我想忽略第一个转换,但我测试过的设备没有这样的问题。有这些问题的设备是Android 8.1,没有问题的设备是6.0。 MainActivity扩展AppCompatActivity 服务扩展服务 TransitionReceiver扩展了BroadcastReceiver。

    • 我正在使用来自ViewPager(在调用活动中)的活动转换,以及共享元素和内容转换。我得到这个崩溃时,重新进入调用活动: 此外,一旦返回,屏幕开始持续闪烁,白色屏幕来回闪烁。 以下是我的转换标志: 我尝试在调用和调用活动上设置进入/退出转换,但没有运气。

    • 我已经成功地将应用程序设置为沉浸式模式,因为我想要隐藏状态栏(在顶部屏幕上)和导航栏(在底部屏幕上)。问题是,当活动改变时,底部条自动出现,并立即下降和消失。我想避免这件事。 所有活动都在清单中设置了AppTheme.NoActionBar样式:

    • 问题内容: 我该怎么做? 我有一个arraylist,带有float元素。 它不起作用。 无法从Object []转换为float [] 问题答案: 自己循环播放。 强制执行nullcheck可以避免,因为(一个对象)可以是,而(原语)根本不能。 如果您已经在使用Java 8,并且以而不是结尾就没问题了,请考虑(没有这样的方法)。

    • 这是一个小问题,但我还是快疯了。 我正在为一个<代码> 问题是当这被渲染时,

    • 我有一个这样的函数 我在那行有个错误,比如在blockquote java.lang.ClassCast异常:com.kreators.nvmobile.dashboard.AdapterSalesAct$ViewHolder不能强制转换为com.kreators.nvmobile.dashboard.SalesActActActive$CustomActiveS 简单地说,我想把我的类函数Cus

    • 我已将ViewPager2与Tablayout连接。其他引用ViewPager的帖子提供了覆盖setCurrentItem(position,false)的方法,其中false禁用平滑滚动。但是,TabLayoutMediator调用OntabSelect(tablayout.tab tab),后者调用viewPager.setCurrentItem(postion,true)。如果TabLayo