我想做的是:
假设我在屏幕的右上角有一个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);
从我在链接中读到的内容来看,您正在尝试直接使用动画器进行初始动画。可以通过使用动画监听器(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