2015-10-24 3 views
3

Я пытаюсь повернуть изображение на кнопку, а затем остановить вращение изображения на другой щелчок. У меня две проблемы: 1.) Я не уверен, как остановить анимацию, когда вы нажмете кнопку во второй раз, и 2.) Мое изображение вращается на самом деле лагги и не постоянно вращается вообще. Я пытаюсь заставить его постоянно вращаться в одном и том же положении.Вращение изображения при нажатии кнопки, чем остановка на кнопке

Вот мой код Java ...

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); 
    } 
} 

и вот мой поворот код XML ...

<?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> 
+0

Вы можете установить логическое значение say isRotating и изменить использование инструкции if/else в коде прослушивания кликов. Благодаря лагированной анимации добавьте линейный интерполятор в вашу XML-анимацию - это может помочь. Также toDegress должно быть только 359, поскольку вы находитесь в замкнутом цикле. –

+0

Хорошо спасибо за отзыв :) –

ответ

1

1, используйте clearAnimation(), чтобы остановить анимацию, поместить код в свой onClickListener :

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

2, используйте imgView.invalidate() после imgView.setImageResource(images[current_image_index]); решить «проблема с лаги».

+0

invalide или invalidate? –

+0

yes, invalidate – zhenghuiyan

+0

У меня только один вопрос. Что действительно делает функция startOffset, и что такое хорошее число, чтобы положить ее на –