Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 透视X/Y如何在旋转动画集中工作_Android_Android Layout_Rotation_Android Animation - Fatal编程技术网

Android 透视X/Y如何在旋转动画集中工作

Android 透视X/Y如何在旋转动画集中工作,android,android-layout,rotation,android-animation,Android,Android Layout,Rotation,Android Animation,我正在努力理解旋转动画是如何工作的。 通过以下步骤,我旋转视图,如下所示: <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="8000" > <rotate android:fromDegrees="0" android:toDegrees="30" android:pivotX="100%"

我正在努力理解旋转动画是如何工作的。
通过以下步骤,我旋转视图,如下所示:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="8000"
>

    <rotate android:fromDegrees="0"
            android:toDegrees="30"
            android:pivotX="100%"
            android:pivotY="100%"
            />

    <rotate
            android:toDegrees="100"
            android:pivotX="100%"
            android:pivotY="30%"
    />
</set>  

结果:

现在箭头所在的位置,我正试图再次以它为中心旋转。
因此,我修改了动画集,如下所示:

<set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="8000">
     <rotate android:fromDegrees="0"
                android:toDegrees="30"
                android:pivotX="100%"
                android:pivotY="100%"
                />  

        <rotate
                android:toDegrees="100"
                android:pivotX="100%"
                android:pivotY="30%"
        />  

     <rotate android:pivotY="-30%"
           android:pivotX="40%"
           android:toDegrees="100"/>    
</set>    

即我加上

<rotate android:pivotY="-30%"
               android:pivotX="40%"
               android:toDegrees="100"/>  

这对我来说似乎是正确的,因为从屏幕上看,旋转点比最左边的y值大约少30%,x比最左边的x值大约多40%。
但当动画运行时,它并没有按预期工作。老实说,我不知道实际的旋转点是什么,整个视图向左倾斜。
结果:


我在这里误解了什么

枢轴是它旋转的点(就像在照片中放一个大头针)。如果“from”和“to”轴不相同,那么您不仅仅是围绕设定点旋转,而是旋转一点,然后更改管脚位置,每一步旋转一点(导致倾斜)

以防你不知道:从左上角开始,而不是从左下角开始

我想你想要的是

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="8000">
     <rotate android:fromDegrees="0"
            android:toDegrees="130"
            android:pivotX="100%"
            android:pivotY="30%" />  
     <!-- I believe this, below will the the correct slide you need -->
     <translate android:fromXDelta="0" 
                android:toXDelta="-100%" />
</set>    


这将使其在[100%,30%]处绕销旋转130度(x为最大值,即屏幕的右边缘,y为屏幕下方的30%),同时向右滑动,直到其达到100%(视图宽度)在它的起始位置右侧

我试图做的是通过一系列连续旋转将视图从显示中旋转出来。我从中了解到,pivotX和pivotY可以有不同的值,否则我如何设置(X,Y)坐标而不是中心坐标,并且不知道确切的像素位置?我的想法是,为了得到图中的绿色箭头,我必须同时“移动”pivotX和pivotY。顺便说一下,你的代码片段也不能满足我的需要。它实际上向左倾斜,就像Welly倾斜一样,我的意思是它漂移了。我的印象是X,Y是视图的最左边。我想做的是旋转并滑动到屏幕的右侧,你是对的。我试着模仿“扔一张牌”的效果。你添加到我的代码中的最后一个片段(删除代码的最后一部分)朝着我想要的方向移动。它是如何工作的?但还是把它移到了右边。一般来说,在屏幕截图中的绿色箭头中,如何使其成为旋转的中心?+1但我的主要问题(无论整个动画如何)仍然是,如何将第一个屏幕截图的绿色箭头指向的位置精确定位为旋转的中心。到目前为止我还不清楚。我确信要做到这一点,我必须相应地设置pivotX和pivotY,但从您的回答来看,这些值似乎是连续应用的,而不是同时应用的。所以我仍然对这些属性是如何工作的感到困惑。我当前的代码显示了如何精确定位那个位置。通常,在整个动画中,您会将该点保留在相同的位置,但由于您要向右滑动,因此可能希望以相同的速率减小pivotX(以使其保持在静态位置)