When click a button rotate image clockwise in android

15,989

Create button_rotate.xml in anim folder:

<?xml version="1.0" encoding="utf-8"?>

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromDegrees="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toDegrees="360" />

Now create animation in Java file:

/* Get ImageView Object */
ImageView iv = (ImageView) view.findViewById(R.id.refresh_action_view);

/* Create Animation */
Animation rotation = AnimationUtils.loadAnimation(context, R.anim.refresh_button_anim);
rotation.setRepeatCount(Animation.INFINITE);

/* start Animation */
iv.startAnimation(rotation);

For stop animation:

iv.clearAnimation();
Share:
15,989
Ahamed Salik
Author by

Ahamed Salik

I'm Ahamed Salik from Matara, Sri Lanka.I'm working in the Mobile software development - Android. You can view my blogs in, http://www.ahamedsalik.com

Updated on June 16, 2022

Comments

  • Ahamed Salik
    Ahamed Salik almost 2 years

    I have a requirement where I have an ImageView and a button.

    http://i1289.photobucket.com/albums/b509/salikclub/Rotate-Last-Start_zps0d2fced8.png

    I want to rotate the image when I click the button. I need the image with full screen. but when I click the button image will be rotate, but not shown in the full screen. Please see the below link.

    http://i1289.photobucket.com/albums/b509/salikclub/Rotate-Last1_zps2ccb1326.png

    After that also when I clicked the button image will rotate. but positions is changed and not shown in full screen.

    My requrement is, when I click the button image will be roatate clockwise and will show in full screen. Again I click the button image must be rotate clock wise and show in full screen. Likewise when I click the button image must be rotate.

    Therefore can someone help me? If you can give me a sample code or a link that will be very much appriciated.

    Here is the code which I'm trying,

    main.xml

    <merge xmlns:android="http://schemas.android.com/apk/res/android" >
    
        <ImageView
            android:id="@+id/imgView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:adjustViewBounds="true"
            android:src="@drawable/matterhorn"
            />
    
        <Button
            android:id="@+id/btnRotate"
            android:layout_width="65dp"
            android:layout_height="35dp"
            android:layout_gravity="bottom|left"
            android:layout_marginLeft="190dp"
            android:layout_marginBottom="15dp"
            android:layout_weight="1"
            android:background="@android:color/transparent"
            android:drawableLeft="@drawable/btn_icon_rotate"
            >
        </Button>
    
    </merge>
    

    This is my main activity "MainActivity.java"

    package com.imageview.rotate;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Matrix;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.ImageView.ScaleType;
    
    public class MainActivity extends Activity implements OnClickListener{
    
        private Button btnRotate;
        private ImageView imgview;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            imgview = (ImageView) findViewById(R.id.imgView);
    
            btnRotate = (Button) findViewById(R.id.btnRotate);
            btnRotate.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
    
            case R.id.btnRotate:
                Matrix matrix=new Matrix();
                imgview.setScaleType(ScaleType.MATRIX);   //required
                matrix.postRotate((float) 180f, imgview.getDrawable().getBounds().width()/2, imgview.getDrawable().getBounds().height()/2);
                imgview.setImageMatrix(matrix);
    
    
                break;
    
            }
        }
    
    
    }
    

    Thanks in advance.

  • Ahamed Salik
    Ahamed Salik almost 11 years
    Hi Pratik, Thanks for the reply. The animation works perfectly, but my requirement is slightly different. When I click the button I need to rotate the image to 90 angles. Can you help me to this. Thanks.
  • Pratik Butani
    Pratik Butani almost 11 years
    You can start animation onClick() of Button
  • Pratik Butani
    Pratik Butani almost 11 years
    You can also change android:toDegrees="90" as per your Requirement. Thanks. :) Accept if useful and Do Vote up ;)
  • Ahamed Salik
    Ahamed Salik almost 11 years
    Hi Pratik. Thanks for the reply. Now orientation change from landscape to portrait. But I can't stop the animation. iv.stopAnimation(rotation); is not working. So how can I stop this
  • Milee
    Milee over 8 years
    Can this be used on a button? I am trying to make the button rotate 180 and then back to 0. Although i used the same code OnClick() , it still doesnot reflect.
  • Kevan Aghera
    Kevan Aghera over 6 years
    i have a imageview rotate 360 degree when click on button and stop after one time animated and after click repeat animated can u help me?