2015-01-04 83 views
0

我新來的Android編程我想知道如何以隨機角度旋轉圖像。我需要這個爲我的「旋轉瓶子」遊戲。這是我到目前爲止的代碼:如何隨機旋轉Android中的圖像?

package example.com.bottlegame; 

import android.graphics.drawable.AnimationDrawable; 
import android.graphics.drawable.RotateDrawable; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import java.lang.Object; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.view.animation.LinearInterpolator; 
import android.view.animation.RotateAnimation; 
import android.widget.ImageView; 
import java.util.Random; 


public class MainActivity extends ActionBarActivity { 

ImageView spin,bottle; 

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

    spin = (ImageView) findViewById(R.id.ivSpin); 
    bottle = (ImageView) findViewById(R.id.ivBottle); 

    final Animation animRotate = AnimationUtils.loadAnimation(this, R.anim.roatate); 

    spin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      bottle.startAnimation(animRotate); 

     } 

    }); 

} 

} 

現在,我用旋轉的XML圖像,但你可以幫我只用Java代碼進行旋轉。這裏是動畫文件夾中的XML代碼:

<?xml version="1.0" encoding="utf-8"?> 
<set 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator"> 

<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:fromDegrees="0" 
    android:toDegrees="360" 
    android:drawable="@drawable/bottle" 
    android:duration="1000" 
    android:repeatCount="1" 
    android:repeatMode="reverse" 
    android:startOffset="0" 
/> 

</set>` 

這裏是activity_main.xml中:

<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:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" 
android:background="@drawable/bg_background"> 


<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="100sp" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/ivSpin" 
    android:src="@drawable/spin_up" 
    android:layout_marginTop="400sp" 
    android:contentDescription="@string/spin" 
/> 

<ImageView 
    android:layout_width="65sp" 
    android:layout_height="200sp" 
    android:id="@+id/ivBottle" 
    android:src="@drawable/bottle" 
    android:layout_marginTop="80dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:contentDescription="@string/bottle" 
/> 


</RelativeLayout> 

回答

1

您可以輕鬆地配置在Java代碼以及XML格式的動畫。對於你的情況,你可以使用類RotateAnimation和它的構造public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

所以,儘量服用點是這樣的:

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

    spin = (ImageView) findViewById(R.id.ivSpin); 
    bottle = (ImageView) findViewById(R.id.ivBottle); 

    float toDegrees = new Random().nextFloat() * Integer.MAX_VALUE % 360; 
    final Animation animRotate = new RotateAnimation(0, toDegrees, 50, 50); 
    animRotate.setDuration(1000); 
    animRotate.setRepeatCount(1); 
    animRotate.setRepeatMode(Animation.REVERSE); 

    spin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      bottle.startAnimation(animRotate); 
     } 
    }); 
} 

我認爲,不需要評論。

+0

非常感謝。我會嘗試現在:) – jelic98 2015-01-04 23:27:10

+0

這一個不工作。只要回到原來的位置。它不會隨機旋轉 – 2017-03-06 04:31:19