how to rotate an image continuously?

前端 未结 6 902
长情又很酷
长情又很酷 2021-01-04 08:26

I am trying to rotate this image by using a thread. what should I do?

     public class Start extends Activity {
        View base;
            Bitmap         


        
相关标签:
6条回答
  • 2021-01-04 08:49

    You can create an extension in Kotlin :

    fun ImageView.rotate(){
    val rotateAnimation = RotateAnimation(
        0f, 359f,
        Animation.RELATIVE_TO_SELF, 0.5f,
        Animation.RELATIVE_TO_SELF, 0.5f
    
    )
    rotateAnimation.duration = 300
    rotateAnimation.setAnimationListener(object : Animation.AnimationListener {
        override fun onAnimationStart(animation: Animation?) {}
        override fun onAnimationRepeat(animation: Animation?) {}
        override fun onAnimationEnd(animation: Animation?) {}
    })
    this.startAnimation(rotateAnimation)
    

    }

    0 讨论(0)
  • 2021-01-04 08:50

    Check this out ..

    Your Java class ..

    package com.example.rotate;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.animation.Animation;
    import android.view.animation.AnimationUtils;
    import android.view.animation.Animation.AnimationListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements AnimationListener {
    
        TextView txtMessage;
        Button btnStart;
    
        // Animation
        Animation animFadein;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            txtMessage = (TextView) findViewById(R.id.tv);
            btnStart = (Button) findViewById(R.id.btn);
    
            // load the animation
            animFadein = AnimationUtils.loadAnimation(getApplicationContext(),
                    R.anim.rotate);
    
            // set animation listener
            animFadein.setAnimationListener(this);
    
            // button click event
            btnStart.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    txtMessage.setVisibility(View.VISIBLE);
    
                    // start the animation
                    txtMessage.startAnimation(animFadein);
                }
            });
    
        }
    
        @Override
        public void onAnimationEnd(Animation animation) {
            // Take any action after completing the animation
    
            // check for fade in animation
            if (animation == animFadein) {
                Toast.makeText(getApplicationContext(), "Animation Stopped",
                        Toast.LENGTH_SHORT).show();
            }
    
        }
    
        @Override
        public void onAnimationRepeat(Animation animation) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void onAnimationStart(Animation animation) {
            // TODO Auto-generated method stub
    
        }
    
    }
    

    your xml file ..

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
    
        <Button 
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/btn"
            />
    
        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="@string/hello_world" />
    
    </RelativeLayout>
    

    And one more thing .. you need to define anim folder in your res folder.

    now place rotate.xml file in anim folder.

    rotate.xml file

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <rotate android:fromDegrees="0"
            android:toDegrees="360"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="600"
            android:repeatMode="restart"
            android:repeatCount="infinite"
            android:interpolator="@android:anim/cycle_interpolator"/>
    
    </set>
    

    That's it. you are good to go.

    0 讨论(0)
  • use this code for rotating a button

    btn_rotate = (Button)findViewById(R.id.btn_rotate);
    rotation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
    rotation.setFillAfter(true);
    btn_rotate.startAnimation(rotation);
    

    rotate.xml

    put this file in res->anim->rotate.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <rotate
        android:duration="500"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"
        android:startOffset="0"
        android:toDegrees="360" />
    </set>
    
    0 讨论(0)
  • 2021-01-04 09:06

    In Kotlin:

     ivBall.setOnClickListener(View.OnClickListener {
    
                //Animate using XML
                // val rotateAnimation = AnimationUtils.loadAnimation(activity, R.anim.rotate_indefinitely)
    
                //OR using Code
                val rotateAnimation = RotateAnimation(
                        0f, 359f,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0.5f
    
                )
                rotateAnimation.duration = 300
                rotateAnimation.repeatCount = 2
    
                //Either way you can add Listener like this
                rotateAnimation.setAnimationListener(object : Animation.AnimationListener {
    
                    override fun onAnimationStart(animation: Animation?) {
                    }
    
                    override fun onAnimationRepeat(animation: Animation?) {
                    }
    
                    override fun onAnimationEnd(animation: Animation?) {
    
                        val rand = Random()
                        val ballHit = rand.nextInt(50) + 1
                        Toast.makeText(context, "ballHit : " + ballHit, Toast.LENGTH_SHORT).show()
                    }
                })
    
                ivBall.startAnimation(rotateAnimation)
            })
    

    rotate_indefinitely.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="600"
        android:fromDegrees="0"
        android:interpolator="@android:anim/linear_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="infinite"
        android:toDegrees="360" />
    
    0 讨论(0)
  • 2021-01-04 09:07

    I know it's probably late but here's how I do a rotate animation on java code:

    RotateAnimation rotate = new RotateAnimation(
                    0, 360,
                    Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 0.5f
            );
    
    rotate.setDuration(900);
    rotate.setRepeatCount(Animation.INFINITE);
    itemImage.startAnimation(rotate);
    
    0 讨论(0)
  • 2021-01-04 09:08

    This worked for me in Kotlin with Android API 29:

    val imageViewAnimator = ObjectAnimator.ofFloat(imageView,View.TRANSLATION_Y, 30f)
        imageViewAnimator.repeatCount = Animation.INFINITE
        imageViewAnimator.repeatMode = ObjectAnimator.REVERSE
        imageViewAnimator.duration = 1500
        imageViewAnimator.start()
    

    The result of this code is a 'slow bouncing' infinite animation, but you can modify it as you wish using the ObjectAnimator properties.

    0 讨论(0)
提交回复
热议问题