标签: android-animation

如何在设置视图的alpha之前创建1秒的延迟?

在我的应用程序中,我将在一个动画后设置alpha.如:

hideMenu = AnimationUtils.loadAnimation( getApplication(), R.anim.menu_layout_hide);
 menuLayout.startAnimation(hideMenu);
 menuLayout.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

但是我想在Alpha设置View之前设置1秒的延迟.因为我无法看到该布局的动画.那怎么可能呢?

谢谢.

xml animation android android-animation layout-animation

36
推荐指数
5
解决办法
5万
查看次数

android 5上的共享元素活动转换

我想在从一个Activity转到另一个Activity时设置共享元素转换.

第一个Activity有一个包含项目的RecyclerView.单击某个项目时,该项目应为新活动设置动画.

所以我在最终活动视图上设置了android:transitionName ="item",以及recycleler-view项目视图.

我还在进行下一个活动时使用此代码:

this.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, itemView, "boomrang_item").toBundle());
Run Code Online (Sandbox Code Playgroud)

单击某个项目时,它会正确转换并显示新视图.真的很好.但是当我点击后退按钮时.有时它工作正常,但大多数时候我的活动崩溃与下面的堆栈跟踪:

   java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference
            at android.view.GhostView.calculateMatrix(GhostView.java:95)
            at android.app.ActivityTransitionCoordinator$GhostViewListeners.onPreDraw(ActivityTransitionCoordinator.java:845)
            at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1956)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5779)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
            at android.view.Choreographer.doCallbacks(Choreographer.java:580)
            at android.view.Choreographer.doFrame(Choreographer.java:550)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?它看起来像android 5中的一个bug

android android-animation activity-transition shared-element-transition android-recyclerview

36
推荐指数
2
解决办法
5687
查看次数

在解雇之前更改DialogFragment进入/退出转换

我有一个DialogFragment,我在onActivityCreated方法中为进入/退出设置动画,如下所示

  @Override
    public void onActivityCreated(Bundle arg0) {
        super.onActivityCreated(arg0);
        getDialog().getWindow()
                .getAttributes().windowAnimations = R.style.DialogAnimation;
    }
Run Code Online (Sandbox Code Playgroud)

我的DialogAnimation样式文件如下

<style name="DialogAnimation">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

这对我有用......

现在我的问题是我希望有两个不同的退出动画,一个用于点击确定按钮,一个用于取消按钮.所以我做的是我尝试在解雇之前更改转换,但它没有工作..任何解决方案如何实现......这就是我的尝试.

  @Override
    public void onClick(View v) {
        getDialog().getWindow()
                .getAttributes().windowAnimations = R.style.DialogAnimation2;
        this.dismiss();
    }
Run Code Online (Sandbox Code Playgroud)

android buttonclick android-animation dialogfragment

36
推荐指数
3
解决办法
2万
查看次数

35
推荐指数
4
解决办法
4万
查看次数

为视图使用淡入动画

我希望有一个View最初是不可见的,当我按下一个按钮时,它会以淡入淡出的动画显示出来.我正在使用AlphaAnimation褪色效果.问题是,如果我使视图不可见,则无法看到动画.

非常感谢,

的Gratzi

android android-animation

34
推荐指数
2
解决办法
6万
查看次数

Android - 使用spread/pinch放大/缩小RelativeLayout

我有一个带有a RelativeLayout和私有类的活动,它扩展了SimpleOnScaleGestureListener.在onScale收听者的方法中,我想放大/缩小整个布局(用户看到的一切),用户传播/捏住他的手指.

我希望布局的更改不是永久性的,即当展开/捏合手势结束时,我希望布局回到最初的位置(任何重置都可以在onScaleEnd方法中完成)SimpleOnScaleGestureListener例如).

我试图通过调用来实现它setScaleXsetScaleYRelativeLayout,也使用ScaleAnimation.两者都没有导致平滑缩放(或者任何可以称为缩放的东西).甚至可以放大/缩小RelativeLayout

我留下的唯一想法是从缓存中读取屏幕截图并将其作为ImageView整个布局的顶部并通过此图像放大/缩小setImageMatrix.但是,我不知道如何实现这一点.

May布局还包含片段的容器,该片段在应该可以进行缩放时为空.在onScaleEnd手势中,片段被放入其容器中(已经实现并且正常工作).这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_pinch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff" >   


<!-- Layout containing the thumbnail ImageViews -->
<LinearLayout
    android:id="@+id/thumbnail_group_pui"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:orientation="horizontal" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c1"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c2"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c3"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c4"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c5"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/tn_c6"/>

    <ImageView …
Run Code Online (Sandbox Code Playgroud)

android android-animation android-layout

34
推荐指数
3
解决办法
5万
查看次数

如何设置状态栏和工具栏的颜色更改动画(就像新的日历应用程序一样)

新的Google日历应用有我想在我的应用中执行的动画.创建新事件时,您可以选择事件的颜色.执行此操作时,状态栏和工具栏将更改为该颜色,并具有覆盖它们的圆形效果.

这是我想做的一个例子:

Google日历新事件工具栏和状态栏颜色更改

我可以更改状态栏和工具栏的颜色,但是当颜色更改时,如何将圆形动画效果(或类似)应用于它们?

android android-animation android-5.0-lollipop

34
推荐指数
2
解决办法
2万
查看次数

如何在Google plus/Google报摊上滚动回收视图?

我如何设置RecyclerView第一次显示项目的时间以及用户滚动时的动画,就像它对google plus应用程序或google新闻站点应用程序的工作方式一样.

我还读到RecyclerView了用户滚动时不直接支持动画的地方; 如果这是真的,我们还有什么方法可以做到吗?

android scroll android-animation android-recyclerview

34
推荐指数
1
解决办法
3万
查看次数

Android翻译动画 - 使用AnimationListener将View永久移动到新位置

我有android翻译动画.我有一个随机生成位置的ImageView(next1,next2).我每隔3秒就调用一次虚空.它生成视图的新位置,然后制作动画并将视图移动到目标位置.翻译动画已实现AnimationListener.动画完成后,我将View永久移动到新位置(在OnAnimationEnd中).我的问题是动画位置与设置layoutParams位置不对应.当动画结束时,它会跳转到一个新位置,大约50-100像素.我认为位置应该是相同的,因为我在两种情况下都使用相同的值(next1,next2).请问您能找到找到溶剂的方法吗?在这里绘制情况

 FrameLayout.LayoutParams pozice_motyl = (FrameLayout.LayoutParams)  pozadi_motyl.getLayoutParams();    
            TranslateAnimation anim = new TranslateAnimation(Animation.ABSOLUTE,pozice_motyl.leftMargin, Animation.ABSOLUTE, next1, Animation.ABSOLUTE, pozice_motyl.topMargin, Animation.ABSOLUTE, next2);
            anim.setDuration(1000);
            anim.setFillAfter(true);
            anim.setFillEnabled(true);

            anim.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                }

                @Override
                public void onAnimationEnd(Animation animation) {




                    FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(100, 100);

                    layoutParams.leftMargin = (int)(next1);
                    layoutParams.topMargin = (int)(next2);
                    pozadi_motyl.setLayoutParams(layoutParams);

                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }
            });

            pozadi_motyl.startAnimation(anim);
Run Code Online (Sandbox Code Playgroud)

这是XML布局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:id="@+id/pozadi0"
    android:gravity="center_vertical"
    android:layout_gravity="center_vertical"          
    android:background="@drawable/pozadi2"
    >



<LinearLayout
android:id="@+id/pozadi_motyl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        >

  <ImageView android:id="@+id/obrazek_motyl"
             android:src="@drawable/motyl"
             android:layout_width="100dip" …
Run Code Online (Sandbox Code Playgroud)

android android-animation translate-animation

33
推荐指数
3
解决办法
10万
查看次数

Android动画:等到完成?

在继续执行程序之前,我想等到Android ImageView中的动画结束*,这样做的正确方法是什么?

  • (在这种情况下,"完成"意味着它完全一次遍历所有帧并在最后一帧停止.我不清楚这个动画是否会是一个android:oneshot ="true"动画,因为我将使用它多个时间,但它不会连续运行但间歇性地运行)

研究/猜测:

答:我的问题似乎是Java线程问题,因为Android AnimationDrawable实现了Java.lang.Runnable.也许线程是解决方案.也许答案会包括加入

B.其他人的方法似乎是使用AnimationListener,这对于我的简单需求来说似乎很困难且不必要地复杂.另外,我不确定如何做到这一点.

C. AnimationDrawable类有一个(boolean)isRunning方法,它可能在while循环中使用(即while(anim.isRunning()){wait(100ms)}).但我有一种直觉,认为这是错误的做法.虽然在并发教程中似乎提到了类似的东西

代码片段

   this.q_pic_view.setImageResource(0);
    this.q_pic_view.setBackgroundResource(R.drawable.animation_test);
    AnimationDrawable correct_animation = (AnimationDrawable) this.q_pic_view.getBackground();
    correct_animation.start();

    //here I tried to implement option C but it didn't work
    while(correct_animation.isRunning()){
        try {
           Thread.sleep(20);
        } catch (InterruptedException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        }
    }
Run Code Online (Sandbox Code Playgroud)

动画

<?xml version="1.0" encoding="utf-8"?>
<animation-list android:id="@+id/AnimTest" android:oneshot="true" xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/animtest001" android:duration="33"/>
  <item android:drawable="@drawable/animtest002" android:duration="100"/>
  <item android:drawable="@drawable/animtest003" android:duration="66"/>
  <item android:drawable="@drawable/animtest004" android:duration="66"/>
  <item android:drawable="@drawable/animtest005" android:duration="33"/> …
Run Code Online (Sandbox Code Playgroud)

java concurrency android android-animation

31
推荐指数
3
解决办法
5万
查看次数