2016-11-03 4 views
-1

Я хочу сделать игру, как убить ошибки, в которых ошибка будет перемещаться в случайном порядке. Но, когда пользователь прикасается к нему, изображение меняется на отвратительную ошибку.Как анимировать ImageButton случайным образом в Android

Как я могу анимировать случайное движение для ImageButton в Android?

+0

показать скриншот вывода –

+0

обновил свой ответ ниже с примером – earthw0rmjim

ответ

1

Вы можете использовать ViewPropertyAnimator, вот быстрый пример:

activity_main.xml:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageButton 
     android:id="@+id/imageButton1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:src="@android:drawable/ic_dialog_info"/> 
</RelativeLayout> 

MainActivity.java:

public class MainActivity extends AppCompatActivity implements Animator 
    .AnimatorListener { 

    Random random = new Random(); 
    ImageButton imageButton; 
    int maxX; 
    int maxY; 

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

     imageButton = (ImageButton) findViewById(R.id.imageButton1); 

     imageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // stopping the animation and changing the image 
       imageButton.animate().cancel(); 
       imageButton.setImageResource(android.R.drawable.ic_delete); 
      } 
     }); 

     imageButton.post(new Runnable() { 
      @Override 
      public void run() { 
       maxX = imageButton.getRootView() 
        .getRight() - imageButton.getWidth(); 
       maxY = imageButton.getRootView() 
        .getBottom() - imageButton.getHeight(); 

       animateButton(); 
      } 
     }); 
    } 

    @Override 
    public void onAnimationEnd(Animator animation) { 
     animateButton(); 
    } 

    private void animateButton() { 
     imageButton.animate() 
      .x(random.nextInt(maxX)) 
      .y(random.nextInt(maxY)) 
      .setDuration(1000) 
      .setListener(this); 
    } 

    @Override 
    public void onAnimationStart(Animator animation) { 
    } 

    @Override 
    public void onAnimationCancel(Animator animation) { 
    } 

    @Override 
    public void onAnimationRepeat(Animator animation) { 
    } 
} 
Смежные вопросы