当我进入下一个活动时,我能够给出自下而上的动画,但现在当我按下时,我使用相同的代码从上到下动画制作动画,但它总是自下而上,所以我的问题是如何给动画我在Android设备上按下按钮时从上到下?
请在下面找到我的代码.
我使用它在从一个过渡Activity到另一个过程中使用它Intent.
overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up );
Run Code Online (Sandbox Code Playgroud)
和xml是:slide_in_up.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="100%p" android:toYDelta="0%p"
android:duration="@android:integer/config_longAnimTime"/>
Run Code Online (Sandbox Code Playgroud)
和slide_out_up.xml是
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="0%p" android:toYDelta="-100%p"
android:duration="@android:integer/config_longAnimTime"/>
Run Code Online (Sandbox Code Playgroud) 您可以下载我的整个项目来尝试和调试.这是我的整个代码的回购:https://bitbucket.org/lexic92/studio48/
当我尝试用空白片段替换空白片段时,我在转换中出现了"鬼片段".
如何重现问题: 我有一个导航抽屉,当我点击一个项目时,它会打开一个填满整个屏幕的片段.
导航抽屉:
按钮2 - 空的片段
当我打开应用程序时,它会从包含文本的片段开始.然后,我打开导航抽屉并单击按钮2. 转换不良,瞬间变为空白屏幕,然后切换回淡入淡出的文本,直到它变为空白屏幕.
如果我打开导航抽屉并再次单击按钮2 ,它将从全文淡出到空白屏幕.因此,对于一个瞬间,它会在不应该的情况下显示带有文本的片段.我一步一步地在调试模式下运行我的应用程序,以减慢速度,并验证这种行为确实发生了.
如果我第三次打开导航抽屉并再次单击按钮2 ,它正确地不会显示任何动画,因为它正在淡入同一个屏幕.
有谁知道为什么会这样?你认为它与导航抽屉有什么关系吗?
这是我的整个代码的回购: https ://bitbucket.org/lexic92/studio48/
以下是一些代码摘录:
SongDetailActivity.java:
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
FragmentManager fragmentManager = getSupportFragmentManager();
//OPEN THE BLANK SCREEN
if(position == 1) {
fragmentManager.beginTransaction()
//.setCustomAnimations(R.anim.fade_in, R.anim.fade_out)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.replace(R.id.songlist_detail_container, PlaceholderFragment.newInstance(position + 1, mSongId))
.commit();
}
//OPEN THE SCREEN WITH TEXT
else {
SongDetailFragment …Run Code Online (Sandbox Code Playgroud) android android-animation android-fragments android-transitions
我正在设置活动X和活动Y之间的过渡动画.
X包含带有图像的列表,单击图像时会展开并在活动Y中 "缩放" .
因此,此图像是X和Y之间的共享元素.我已经transitionName在XML布局中设置了它的属性.
这是启动活动Y的代码:
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, clickedImage, clickedImage.getTransitionName());
startActivityForResult(intent, OPEN_PICTURE_REQUEST, options.toBundle());
Run Code Online (Sandbox Code Playgroud)
直到这里,一切正常.但是,我还想在输入时为活动Y的布局设置动画.
为此,我在XML文件(picture_enter.xml)中定义了转换:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
<transition
class="android.transition.Explode"
android:startDelay="200">
<targets>
<target android:targetId="@+id/top_toolbar_container" />
</targets>
</transition>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)
最后,在onCreate活动Y中我将初始化过渡:
TransitionInflater inflater = TransitionInflater.from(this);
Transition transition = inflater.inflateTransition(R.transition.picture_enter);
Window window = getWindow();
window.setEnterTransition(transition);
Run Code Online (Sandbox Code Playgroud)
但这从未执行过.只有图像的"缩放"效果才能正常工作.我也尝试过以编程方式定义转换.
有什么建议?
android android-activity android-transitions android-5.0-lollipop
我需要有关活动之间转换的帮助:
我有两个活动A和B,两个都有一个具有相同图像列表的ViewPager.每个页面都有与一个ImageView的transitionName等于image_x其中X是页面的索引.
A启动活动B调用ActivityOptionsCompat.makeSceneTransitionAnimation,输入转换完全正常.
问题如下:当我关闭活动B时,退出转换不会在B的相同位置初始化活动A的视图寻呼机.
当用户关闭B时,后者在结果中设置当前页面位置.在onActivityResult活动A中,我调用了setCurrentItem,并且行为显示在gif中.
有没有办法在退出转换开始之前更新活动A?
android android-animation android-viewpager android-transitions
你好再次堆栈溢出.我有另一个片段问题.(我正在使用android.app.Fragment而不支持片段)
我正在尝试更换片段.但这不像使用那么简单:
fragmentTransaction
.replace(containerId, newFragment)
.addToBackStack("unique tag")
.commit()
Run Code Online (Sandbox Code Playgroud)
为什么不?好朋友问,因为我newFragment有过渡动画.
动画在哪里定义?另一个很棒的问题,它在碎片onCreateAnimator()中定义
为什么在那里定义?可以找到原因的长答案:嵌套片段转换不正确.现在你需要相信这就是我的项目需要做的事情.
动画是做什么的?从屏幕边缘到其中心的简单滚动,完全覆盖原始片段.请记住,在这种情况下,旧片段只是坐在原地.它具有不移动的动画效果.
问题是newFragment似乎比旧版本具有更低的高程(或z?)值.因此,无法观察到过渡,因为旧片段位于新片段上方.到达动画持续时间结束时,您会看到新片段在旧片段上方闪烁.我期望newFragment从动画开始就覆盖旧版本.
为什么不使用添加?这似乎会产生更多问题,因为我有很多片段要交换进出视图.使用add似乎会在下次使用replace时触发它们的退出动画,即使前面有1 ... n个片段.他们也不会停顿.
为什么不设置高程?因为我支持没有提升属性的api 19.
为什么不对api 19使用ViewCompat.setElevation()?我尝试了它并且有相同的失败结果.
有没有人找到解决这个问题的方法?
android android-fragments fragmenttransaction android-transitions fragment-animation
添加退出并输入活动转换到应用程序后,我收到崩溃报告,如下所示:
致命异常:显示java.lang.NullPointerException:尝试在上$ android.view.ViewOverlay OverlayViewGroup.add(ViewOverlay.java空对象引用调用虚拟方法android.view.ViewParent android.view.View.getParent()': 164)在android.上移动android.app.EnterTransitionCoordinition.startSharedElementTransition(EnterTransitionCoordinator.java:325)上的android.view.View.Ov响应动画(EnterTransitionCoordinator.java:598)的android.view.ViewGroupOverlay.add(ViewGroupOverlay.java:63). app.EnterTransitionCoordinator.access $ 200(EnterTransitionCoordinator.java:42)在Android.app的android.app.EnterTransitionCoordinition $ 5 $ 1.run(EnterTransitionCoordinator.java:389)android.app.ActivityTransitionCoordinition.startTransition(ActivityTransitionCoordinator.java:698). EnterTransitionCoordinator $ 5.onPreDraw(EnterTransitionCoordinator.java:386)在android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)在android.view.ViewRootImpl.performTraversa ls(ViewRootImpl.java:1985)在Android.view.ChoreIvers.verTraversal(ViewRootImpl.java:1077)的android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:5845)at android.view.Choreographer $ CallbackRecord.run (Choreographer.java:767)位于android.view.Choreographer的舞台上的android.view.doCallbacks(Choreographer.java:580)的android.view.Choreographer $ FrameDisplayEventReceiver.run(编舞. java:753)在android.os.Handler.handleCallback(Handler.java:739)的android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:135)at android.app.ActivityThread.main(ActivityThread.java:5272)位于com.android的java.lang.reflect.Method.invoke(Method.java)java.lang.reflect.Method.invoke(Method.java:372) .internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:909)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704)
它不可重复,但崩溃计数很重要.
做了一些研究,我发现这个提交表明它(实际上)是Android中的一个内部错误:https: //android.googlesource.com/platform/frameworks/base/+/83c692efd3c53050fce132dfd2ef21763d3cf010%5E%21/#F0
所有崩溃报告都是5.0,5.0.1或5.0.2.因为5.1有更广泛的传播,但没有显示崩溃,似乎EnterTransitionCoordinator在5.1中被修复.
因此,一种可能的解决方案是检查API级别22或更高级别,然后只进行转换.不过我想知道是否有更好的方法; 一些解决方法可能,尽管这似乎是Android的内部问题(堆栈中的所有系统类)?
我用的是什么:
activity_stay.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0%p"
android:toYDelta="0%p" />
</set>
Run Code Online (Sandbox Code Playgroud)
activity_slide_to_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<translate
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="0"
android:toYDelta="100%p" />
</set>
Run Code Online (Sandbox Code Playgroud)
activity_slide_from_bottom.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<translate
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0" />
</set>
Run Code Online (Sandbox Code Playgroud)
启动NewActivity:
startActivity(NewActivity.getIntent(this))
overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay)
Run Code Online (Sandbox Code Playgroud)
NewActivity完成():
finish()
overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom)
Run Code Online (Sandbox Code Playgroud)
当NewActivity启动时,OldActivity消失 - 我看到空白的白色屏幕,NewActivity在其上方滑动到顶部.但是我需要的是我的NewActivity在启动时滑到OldActivity内容之上.我怎样才能做到这一点?
UPD:当我因为某些原因完成NewActivity时,所有动画都会完美执行:NewActivity滑到底部,OldActivity内容出现在NewActivity内容之下.
android android-animation android-xml android-activity android-transitions
我有RecyclerView很多项目,基本上是一些CardView.
这些卡片在他们的身体中间有一个支持文本,GONE默认情况下可见性设置为,VISIBLE当我点击卡片右侧的箭头时,它就会生成.
我正在尝试在文本显示的同时对卡进行动画处理,同时它会崩溃.
下图显示了扩展卡和折叠卡:
该CardView布局(我已经删除了可读性某些部分):
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
card_view:cardCornerRadius="3dp"
card_view:cardElevation="4dp"
card_view:cardUseCompatPadding="true"
android:id="@+id/root">
<LinearLayout
android:id="@+id/item_ll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="@dimen/activity_vertical_margin">
<!-- The header with the title and the item -->
<TextView
android:id="@+id/body_content"
style="@style/TextAppearance.AppCompat.Medium"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:layout_marginBottom="8dp"
android:text="@string/about_page_description"
android:textColor="@color/secondaryText"
android:visibility="gone"/>
<!-- The divider, and the footer with the timestamp -->
</LinearLayout>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
当卡片展开并露出身体时TextView,动画正在工作,但是,当我试图将其折叠回来时,动画片下方的卡片与第一张卡片重叠.
例:
我之前已经在这里问了一个关于这种行为的类似问题,但是这个解决方案并不适用TextView于卡片的中间位置.
负责动画部分的代码在RecyclerView适配器内部.箭头有一个点击监听器,可以调用以下方法:
private …Run Code Online (Sandbox Code Playgroud) android android-animation kotlin android-transitions android-recyclerview
我有以下问题:
我正试图从FragmentA 过渡到FragmentB.这些片段之间有一个共享元素,Button以及其他形式View's(参见布局).
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:flipper="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mypackage.view.IndicatorViewFlipper
android:transitionGroup="true"
android:id="@+id/intro_viewflipper"
android:layout_width="match_parent"
android:layout_height="match_parent"
flipper:indicatorColor="@color/white"
flipper:indicatorMargin="4dp"
flipper:indicatorRadius="4dp"
flipper:indicatorBarMargin="104dp"/>
<Button
android:id="@+id/account_create_btn"
style="?android:attr/borderlessButtonStyle"
android:textColor="@color/white"
android:layout_width="match_parent"
android:layout_height="@dimen/button_standard_height"
android:layout_above="@+id/txt_already_account"
android:background="@drawable/button_yellow_selector"
android:transitionName="create_account"
android:text="@string/account_create_btn"
android:textSize="24sp"
android:textAllCaps="false" />
<TextView
android:id="@+id/txt_already_account"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_above="@+id/account_login_btn"
android:layout_marginTop="24dp"
android:text="@string/account_welcome_already_account"/>
<Button
android:id="@+id/account_login_btn"
style="?android:attr/borderlessButtonStyle"
android:layout_width="match_parent"
android:layout_height="@dimen/button_standard_height"
android:layout_marginTop="8dp"
android:layout_alignParentBottom="true"
android:transitionName="login"
android:background="@drawable/button_blue_selector"
android:textColor="@color/white"
android:textSize="24sp"
android:textAllCaps="false"
android:text="@string/account_create_login_btn"/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我要做的是让Fragment 除了共享元素之外的所有内容,转换(向左滑动)并让所有内容形成FragmentB,除了共享元素从右边滑入.在此内容转换期间,我希望共享元素保持其原始位置,直到内容转换完成,然后让它滑动到FragmentB中的新位置.
最后一个行为是出错的地方:一旦我在FragmentA中开始退出转换,共享元素就会消失并从右边滑入,内容转换为FragmentB.如果我不添加任何退出,共享元素的行为是正确的/输入过渡.
代码(在FragmentA中):
Fragment …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我正在使用Android Activity Slide过渡.我遵循了一个很好的教程,一切都按预期工作,除了我的提示EditText,其中包含InputTextLayout:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/activity_vertical_margin">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="Your name"/>
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
所有组件都很好地动画,但提示只是在动画开始之前弹出并保持在最终位置.我是否必须添加一些额外的代码来告诉框架为该提示设置动画?
根据Android开发人员文档,它应该工作(或者至少它不是不受支持的).
我正在使用支持设计库的22.2版.
如果有人能指出我正确的方向,那就太棒了.