3

I am trying to rotate an image on a button click and then stop rotating the image on another button click. I am having two problems, 1.) I'm not sure how to stop the animation when you click the button the second time, and 2.) My image rotating is really laggy and not constantly rotating at all. I am trying to make it constantly rotate in the same position.

Here is my java code...

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private static ImageView imgView;
    private static Button button;
    private int current_image_index;
    private static Button creditsButton;
    int[] images = {R.mipmap.imageid, R.mipmap.imageid};

    ImageView blade;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonClick();
        creditsClick();

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
    }




    public void buttonClick() {
        imgView = (ImageView) findViewById(R.id.imageView);
        button = (Button) findViewById(R.id.button);
        blade = (ImageView)findViewById(R.id.imageView4);
        final Animation animRotate = AnimationUtils.loadAnimation(this, R.anim.rotate);


        button.setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        blade.startAnimation(animRotate);
                        current_image_index++;
                        current_image_index = current_image_index % images.length;
                        imgView.setImageResource(images[current_image_index]);
                    }


                }
        );
    }






    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

and here is my rotate xml code...

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="1000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="48%"
        android:toDegrees="1080"
        android:repeatCount="infinite"
        />
</set>
  • You could set a boolean value say isRotating, and change use a if / else statement within the click listener code. With the laggy animation add a linear interpolator in your XML animation - this may help. Also toDegress only needs to be 359 as you're in a inifite loop. – Mark Oct 24 '15 at 02:22
  • Alright thanks for the feedback:) – Leyton Taylor Oct 24 '15 at 02:24

1 Answers1

1

1, use clearAnimation() to stop animation, put code below to your onClickListener:

if (blade.getAnimation() == null) {
    // no animation, start it
    blade.startAnimation(animRotate);
} else {
    //animation is showing, stop it
    blade.clearAnimation();
}

2,use imgView.invalidate() after imgView.setImageResource(images[current_image_index]); to solve "laggy problem".

zhenghuiyan
  • 324
  • 4
  • 10