【问题标题】:How to rotate ImageView by clockwise如何顺时针旋转ImageView
【发布时间】:2019-12-30 18:14:33
【问题描述】:

我有向上滑动的面板,在该面板的标题栏中,我有 ImageView,如图所示。用户向上滑动面板时如何将 ImageView 顺时针旋转到 180*,向下滑动时如何逆时针旋转。

对于滑动该面板,我有方法:

@Override
public void onPanelSlide(View panel, float slideOffset) {
     Log.i(TAG, "onPanelSlide, offset " + slideOffset);

     //Animation here
}

感谢您的帮助!

【问题讨论】:

  • 使用两个不同的图像。
  • @Guanxi 你好,你好吗?你明白我的问题吗?我不仅需要更改 ImageView。我需要顺时针旋转。你有什么想法吗?
  • 检查我的答案,我在以前的项目中使用过这个。如果对你有帮助,你可以接受我的回答。

标签: android animation android-activity android-fragments android-animation


【解决方案1】:

如果你想旋转没有动画的视图:

  • view.setRotation(float) 设置视图的度数 围绕枢轴点旋转。增加值导致顺时针方向 旋转。
  • view.setRotationX(float) 设置视图的度数 通过枢轴点绕水平轴旋转。 从以下角度来看,增加值会导致顺时针旋转 向下看 x 轴。旋转大视图时,建议相应调整相机距离。

  • view.setRotationY(float) 设置视图的度数 通过枢轴点绕垂直轴旋转。增加 值导致从视点逆时针旋转 向下看 y 轴。旋转大视图时,建议相应调整相机距离。

如果你想使用动画:

【讨论】:

    【解决方案2】:

    我不想将此标记为答案,但我还不能离开 cmets,我能够让 Apurva 的解决方案正常工作,但我不得不使用它而不是 getApplicationContext(),我不得不使用它,因为在我设置动画的地方,我附加动画的应用程序中的代码看起来像这样......

    ImageView billysArm = (ImageView) findViewById(R.id.imageView6);
    
        Animation rotate = AnimationUtils.loadAnimation(this, R.anim.rotate);
    
        billysArm.startAnimation(rotate);
    

    希望对你有帮助

    【讨论】:

    • 你好尼克!在我的情况下,ImageView 的更改必须取决于面板从按钮打开的距离。 ImageView 逐渐变化,而不是通过计时器。我发现的大多数 od 解决方案都有计时器。但在我的情况下,旋转取决于面板打开的距离......您还有其他想法吗?
    • 我不确定我是否理解您的确切要求,但如果我理解正确,则不一定需要计时器,我实际上发现如果我更改使用的 xml旋转是这样的...... android:repeatMode="reverse" android:repeatCount="4" 并取出上面示例中提供的第二个旋转它会进行平滑旋转并返回而不需要计时器和只需点击即可激活
    【解决方案3】:

    你应该试试这个,为你的例如设置一个动画。 ImageView

    @Override
    public void onPanelSlide(View panel, float slideOffset) {
         Log.i(TAG, "onPanelSlide, offset " + slideOffset);
    
        // Locate view
        ImageView iv= (ImageView) findViewById(R.id.iv);
    
        // Create an animation instance
        Animation an = new RotateAnimation(0.0f, 180.0f, pivotX, pivotY);
    
        // Set the animation's parameters
        an.setDuration(10000);               // duration in ms
        an.setRepeatCount(0);                // -1 = infinite repeated
        an.setRepeatMode(Animation.REVERSE); // reverses each repeat
        an.setFillAfter(true);               // keep rotation after animation
    
        // Aply animation to image view
        iv.setAnimation(an);
    }
    

    【讨论】:

    • 你好@marcus 这里的pivotX pivotY是什么意思?顺便说一下,ImageView 的变化取决于面板离按钮多远。但现在我仍然不知道如何做到这一点。这里的 slideOffset 表示面板离底部有多远。我用它来逐渐改变面板的颜色,如图所示。但是据我了解,您有计时器,这不是我想要的。 =(
    • 您可以将持续时间设置为 0...@Nurzhan Nogerbek
    • 你好@marcus 我很确定你理解我的问题。在我的情况下,ImageView 的更改必须取决于面板从按钮打开的距离。 ImageView 逐渐变化,而不是通过计时器。我发现的大多数解决方案都有计时器。但在我的情况下,旋转取决于面板打开的距离......你还有其他想法吗?
    • @NurzhanNogerbek pivotX 和 pivotY 是图像应该围绕其旋转的坐标。您可以使用 slideOffset 值来检查它是否超过了 ImageView 锚点,然后按照上面的建议触发旋转动画
    猜你喜欢
    • 2016-11-27
    • 2012-08-19
    • 1970-01-01
    • 2012-05-16
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    相关资源
    最近更新 更多