【问题标题】:Rotating an Android View旋转 Android 视图
【发布时间】:2011-12-05 20:09:15
【问题描述】:

我想旋转 API 级别 8 的 Android 视图。例如,我想将 EditText 旋转 90 度,这样当用户在左对齐的 EditText 中输入文本时,第一个字符位于底部(旋转 90度)和后续字符向上输入。

我首先尝试使用持续时间为 0 的动画,但您仍然看到场旋转。不幸的是,这是一个非首发。如果我能找到一种完全隐藏动画的方法,这个方法看起来是最简单的。

然后,我尝试在 onDraw 中旋转画布,这对于方形视图非常有用,但对于非方形视图(而且我不控制 EditText 的尺寸)来说不是很好。我尝试了各种剪裁和翻译画布的尝试,但是虽然我可以在文本输入开始时让光标进入视野,但一旦有人开始输入更多内容,它就会做一些奇怪的事情(通常内容会消失在视野之外) .

我还尝试在 onMeasure 中制作 View 正方形,然后在 onDraw 中旋转画布,然后将 View 尺寸放回后续 onMeasure 中。前两个步骤效果很好。但是第三步产生了与上述类似的结果:在用户开始输入更多文本之前,一切看起来都还不错,此时字段文本做了一些奇怪的事情(通常会消失)。

有没有人能够成功地旋转非方形的 Android 视图(例如 EditText)而不使用动画,并且 API 级别为 8 或更低?

【问题讨论】:

    标签: android animation view canvas rotation


    【解决方案1】:

    我花了相当多的时间尝试在 API 级别 8 上准确地旋转视图,但我认为它不可能正常工作。仅供参考,尽管 View 类中有 setRotation(int angle) 方法,但它也无法在 android 3.2 上正常工作。例如,这对于 VideoView 根本无法正常工作。

    P.S 那时似乎我已经设法使旋转的东西适用于 VideoView 以外的任何东西。您是否覆盖了onTouchEvent 方法?如果您没有,您的视图将不会收到触摸事件,因为旋转画布只会使视图绘制旋转,但它仍会在其旧区域接收触摸事件。您必须手动将旋转矩阵应用于触摸事件坐标,以便将它们偏移到正确的位置。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多