【问题标题】:How to do rotation animation on a RelativeLayout如何在RelativeLayout上做旋转动画
【发布时间】:2014-02-18 01:02:18
【问题描述】:

我需要在RelativeLayout 上做一个旋转动画,我使用了NineOldAndroid 动画库:

View v = findViewById(R.id.wrap_btnSelect);
ObjectAnimator t1 = ObjectAnimator.ofFloat(
        v, "rotation", 0.0f, -45.0f);
t1.setStartDelay(500);
t1.setDuration(1500);
t1.start();

动画效果很好,ICS 上的点击位置也会相应更新,但Gingerbread 上的点击位置停留在旧位置,这使得视图无法点击。

我能做些什么来解决 android 2.3 上的这个问题吗?

原始布局:

正在努力实现这一目标:

编辑:此布局由 4 个正方形构成,每个正方形是 TextView。

【问题讨论】:

    标签: android android-layout android-relativelayout android-animation nineoldandroids


    【解决方案1】:

    您可以扩展View 来自己处理触摸事件,并根据点击时的旋转值来判断您在哪个区域点击。

    类似这样的:

    public class WrapBtnSelect extends RelativeLayout {
        // Copy onstructors here
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                double x = (event.getX() / getWidth()) * 2 - 1;
                double y = (event.getY() / getHeight()) * 2 - 1;
                double angle = Math.atan2(y, x);
                // Do your actions depending on the angle here
    
                return true;
            }
            return super.onTouchEvent(event);
        }
    }
    

    【讨论】:

    • 此布局由 4 个正方形构成,每个正方形是一个TextView。这种方法似乎有点过度劳累。是否可以实际旋转按钮?
    • 您可以在 RelativeLayout 上调用 View.setRotation(),但它只能从 API 11 获得(顺便说一句,您也使用 ObjectAnimator,它只能从 API 11 获得)。要使用 API 8,我将使用 View Animation 为 RelativeLayout 设置动画,并使用自定义类来处理单击事件,因为 View Animation 实际上并不移动视图,因此您的位置不会根据动画而更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多