`
iaiai
  • 浏览: 2180747 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android 组件动画移动后原位置不变的解决办法

 
阅读更多
在做项目的时候发现给一些组件添加了移动动画,并且动画完之后停止在动画之后的位置之后再去点击组件的时候就点不到了,但是点移动之前原来的位置是可以,

从网上查了一下,解决办法都是在动画完之后把LayoutParams重新设置一下,这里一定要注意,设置完之后一定要把动画再清除一下clearAnimation(),否则两个设置会叠加在一起:
        AnimatorSet animationSet = new AnimatorSet();

        ObjectAnimator animator = ObjectAnimator.ofFloat(mainLayout, "translationY", 0, 25);
        animationSet.playTogether(animator);

        animationSet.setDuration(300);
        animationSet.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mainLayout.getLayoutParams();
                params.topMargin = params.topMargin + 25;
                mainLayout.setLayoutParams(params);
                mainLayout.clearAnimation();
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animationSet.start();




测试又发现一个问题,在2.3.3版本和此版本以下的版本移动之后都需要手动移动一下位置,但是4.x多的系统以经不需要再手动移动,所以在加一个判断,修改成如下:
        AnimatorSet animationSet = new AnimatorSet();

        ObjectAnimator animator = ObjectAnimator.ofFloat(mainLayout, "translationY", 0, 25);
        animationSet.playTogether(animator);

        animationSet.setDuration(300);
        if(Build.VERSION.SDK_INT<14) {  //低于android4以下的动画完之后手动调整位置
            animationSet.addListener(new Animator.AnimatorListener() {
                @Override
                public void onAnimationStart(Animator animation) {

                }

                @Override
                public void onAnimationEnd(Animator animation) {
                    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mainLayout.getLayoutParams();
                    params.topMargin = params.topMargin + 25;
                    mainLayout.setLayoutParams(params);
                    mainLayout.clearAnimation();
                }

                @Override
                public void onAnimationCancel(Animator animation) {

                }

                @Override
                public void onAnimationRepeat(Animator animation) {

                }
            });
        }
        animationSet.start();
分享到:
评论

相关推荐

    android imageview 多点触碰(Multitouch)实现图片拖拽移动缩放

    在Android开发中,Imageview是用于显示图像的基本组件。然而,为了提供更加丰富的用户体验,我们经常需要实现一些高级功能,比如多点触碰(Multitouch)支持,使得用户能够通过手势来拖拽图片、移动图片位置以及缩放...

    EditText跟随键盘弹出,背景不动

    使用Android Support库或AndroidX库中的组件,比如`androidx.coordinatorlayout.widget.CoordinatorLayout`配合`androidx.core.widget.NestedScrollView`和`AppBarLayout`,可以更方便地处理键盘事件和视图动画。...

    android开发常用图片

    3. **九宫格图片(9-patch)**:Android特有的9-patch图片可以自适应拉伸,对于需要保持比例不变或需要可扩展边框的图片非常有用。开发者需要使用特殊工具(如Android Studio内置的draw9patch工具)来创建和编辑9-...

    Android-双方向的列表侧边顶部菜单不变其他实现双向滚动

    在Android开发中,RecyclerView是一个非常重要的视图组件,它提供了高度可定制的列表或网格视图,用于高效显示大量数据。本项目“Android-双方向的列表侧边顶部菜单不变其他实现双向滚动”旨在实现一个特殊的...

    Android实现图片顺时逆时旋转及拖拽显示效果

    - 实时更新显示:每次触摸事件发生后,都需要调用`invalidate()`方法,使View重新绘制,以看到图片的位置变化。 3. **代码实现**: 创建一个名为MovePicture的自定义View类,继承自ImageView。在该类中,你需要...

    android带header的Scrollable

    总的来说,`android带header的Scrollable`是一个实用的Android组件,它简化了在列表视图中实现固定表头、下拉刷新和上拉加载更多功能的过程,提高了开发效率,并为用户提供了一致且流畅的体验。对于想要提升Android...

    移动端图片浏览双指放大组件

    "移动端图片浏览双指放大组件"就是为了解决这个问题而设计的。它允许用户通过双指手势来放大或缩小图片,增强了交互性和视觉体验。在这个组件中,我们主要会探讨以下几个关键知识点: 1. **触摸事件处理**: - ...

    Android Gridview拖动item

    5. **动画效果**:为了提高用户体验,可以在拖动过程中添加平滑的动画效果,如使用ObjectAnimator或者ViewPropertyAnimator来改变item的位置。 6. **处理边界情况**:确保拖动操作不会超出GridView的范围。当拖动...

    android仿淘宝聚划算 滚动标签, 第一个标签固定

    在Android开发中,为了实现类似淘宝聚划算的滚动标签效果,我们需要掌握一些核心知识点,包括自定义View、布局管理、滚动动画以及触摸事件处理。这个项目的目标是创建一个标签栏,其中第一个标签始终保持固定,后面...

    activity跳转动画

    在Android应用开发中,Activity是应用程序的基本组件,用于展示用户界面和处理用户交互。Activity间的跳转是Android应用中常见的操作,例如从一个页面导航到另一个页面。在Android中,我们可以通过Intent对象来启动...

    RecyclerView配合ItemTouchHelper实现频道排序、移动

    在Android开发中,RecyclerView是一个非常重要的组件,它用于展示可滚动的数据列表,具有...这个过程涉及了Android组件的高级使用、触摸事件的处理以及数据和视图的同步,对于提升App的交互性和用户体验有着重要作用。

    Android仿支付宝(包含固定高度ViewPager)首页伸缩功能

    在Android应用开发中,支付宝作为一款知名的移动支付平台,其用户界面设计和交互体验一直备受开发者们的关注。本文将深入探讨如何在Android中实现类似支付宝首页的伸缩功能,其中包括固定高度的ViewPager组件的运用...

    Android ViewPager实现无限循环(1.首尾完美过渡)

    同时,要确保在设置Adapter后调用`setCurrentItem(int position, boolean smoothScroll)`方法,设置初始位置为中间页面,并开启平滑滚动。 为了实现平滑的过渡效果,我们需要在PagerAdapter中对数据进行复制。具体...

    xiaochen.rar_android_xiaochen_网络

    在移动应用开发领域,Android与iOS两大操作系统各自拥有独特的用户界面和交互设计。作为开发者,有时为了提供跨平台的一致性体验,或者是为了追求创新,可能会尝试在Android平台上模仿iPhone的某些特性,例如其菜单...

    android 双击放大缩小

    同时,为了保持图片的中心点不变,还需要计算新的图片中心坐标,并更新`ImageView`的位置。 6. **平移操作**: 当图片被放大后,用户可能需要平移查看图片的不同区域。这同样可以通过处理`MotionEvent`的ACTION_...

    interpolator详细说明

    总的来说,Interpolator是Android动画系统中的一个重要组件,它使得动画效果更加丰富多样,能够根据开发者的需求创造出各种独特的动画过渡效果。理解并熟练运用Interpolator,可以极大地提升Android应用的用户体验。

    android手势识别demoGestureLock

    Android SDK中提供了一个名为`GestureOverlayView`的组件,它可以帮助我们轻松地集成手势识别功能。`GestureOverlayView`可以捕获手势并将其转换为`Gesture`对象,然后通过`GestureLibrary`进行识别。开发者只需要...

    安卓Android源码——通过手势对图片进行任意放大绽放旋转.zip

    5. **ImageView组件**:在Android中,`ImageView`是展示图片的基础组件。为了支持手势操作,可能需要扩展`ImageView`并覆盖其`onTouchEvent()`方法,以便捕获和处理手势事件。 6. **Matrix与动画**:在处理图片的...

    swift-Swift实现广告轮播图。无限轮播图。Android中的ViewPager

    Android中的ViewPager”是为了在Swift环境下模仿Android中的ViewPager功能,创建一个无限循环的广告轮播组件。在Android开发中,ViewPager是一个常用的组件,它允许用户左右滑动查看多个页面,通常用于展示广告或一...

    自定义可拖动、旋转、缩放的imageview

    为了保持图像的中心点不变,我们需要在每次变换后更新图片的矩阵。Android提供了`Matrix`类,可以方便地处理图像的平移、旋转和缩放。 ```java Matrix matrix = new Matrix(); matrix.postTranslate(dx, dy); // 平...

Global site tag (gtag.js) - Google Analytics