首页 > 解决方案 > Xamarin Android,您如何旋转 Vector Drawable?

问题描述

编辑:查看我自己的答案,我已经添加了更多细节,因为我已经设法通过 XML 获得动画,我不明白为什么我的代码没有做同样的事情。

我正在尝试在 Xamarin Android(不是 Forms)中显示几个 Vector Drawable,并在另一个上旋转其中一个。这个想法是一个计时器,一只手绕着时钟走。我在手似乎做了几个完整的旋转然后停在一个随机的角度。所以它可以在旋转完成后停在 3 点或 10 点。

我原以为我正在尝试做的事情将以编程方式完成,而不是通过 XML,但是我找不到任何好的信息来开始我的工作。我对基本 Android 不太熟悉(我对 Xamarin Forms 很熟悉)。

我可以让脸部和手部都显示在 ImageView 控件中。这是我使用 layer-list.xml 和 LayerDrawable 完成的。我尝试使用 fromRotation 和 toRotation 集从手上创建一个 RotateDrawable,然后将其应用于 LayerDrawbale。它确实绘制但不旋转。同样适用于 layer-list xml,两者都绘制,手没有旋转。

我试过在这里和谷歌搜索,到目前为止我找不到任何可靠的东西让我开始。只是 XML 的片段。我觉得我错过了一些非常基本的东西。

任何帮助都是巨大的。

这是图层列表的 xml

<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"    
>
  <item    
      android:drawable="@drawable/Clock"/>
  <item>
    <rotate
      android:drawable="@drawable/Needle"
      android:pivotX="50%"
      android:pivotY="1%"
      android:fromDegrees="0"
      android:toDegrees="1080"
      />
  </item>
     
</layer-list>

将图层列表设置为 Imageview 的代码。


ImageView clockDisplay = FindViewById<ImageView>(Resource.Id.ThreePlayers);
Drawable clock = VectorDrawableCompat.Create(Resources, Resource.Drawable.Clock, null);
clockDisplay.SetImageDrawable(clock);

/*
  I have also used the following to no avail.

  RotateDrawable clockRotate = new RotateDrawable();

  clockRotate.Drawable = needle;
  clockRotate.FromDegrees = 180;
  clockRotate.ToDegrees = 180;

  clockDisplay.SetImageDrawable(clockRotate);

*/

干杯安迪。

标签: androidxamarinxamarin.androidandroid-vectordrawable

解决方案


编辑:我已经完全改变了这个答案。

根据主帖评论中的建议,我通过旋转图像视图来进行旋转。

我在这里创建了一个测试程序

使用 AnimationSet 和 OhectAnimator 对 ImageView 进行动画处理,一种使用 Spring Animator,另一种尝试直接在 C# 中对 VectorDrawable 进行动画处理

前两个按预期工作,对于我正在从事的项目来说已经足够了,因为我只需要轮换。

但是,如果不对 ImageView 控件进行动画处理,就不能在 C# 中对 VectorDrawable 进行动画处理吗?

如果我在 XML 中创建静态动画,我可以操作 VectorDrawable 的不同层并分别为它们设置动画,这肯定可以在 C# 中完成吗?

我开始认为不可能以编程方式进行。|

有什么建议吗?谢谢。安迪。


推荐阅读