2015-11-02 23 views
1

即時通訊嘗試在我的Android應用程序中製作一個簡單的財富輪。這將是一個帶有人名的圓形圖像。按下其下方的按鈕時,圖像將開始旋轉(圍繞其中心)。輪換需要在隨機時間後停止,所以它不總是同一個人的名字。現在我只使用1-2-3-4的圖片,見下。如何在Android中旋轉圖像,並在按下的按鈕上隨機停止

Output example

伊夫看着幾乎對此每一個主題,但不能弄清楚如何使它隨機的。目前,它總是停在同一個角度,比如總是在編號1

代碼中,我有SOFAR:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_who, container, false); 


    final ImageView alberto = (ImageView)view.findViewById(R.id.alberto); 
    Button spin =(Button)view.findViewById(R.id.spin); 

    final RotateAnimation anim = new RotateAnimation(0f,generateRandomNumber(), Animation.RELATIVE_TO_SELF, 0.5f, 
      Animation.RELATIVE_TO_SELF, 0.5f); 
    anim.setFillAfter(true); 
    anim.setDuration(1000); 


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

    return view; 
} 

public float generateRandomNumber() { 

    Random rand = new Random(); 
    int randomNum = rand.nextInt((360 - 0) + 1); 

    return (float)randomNum; 
} 

}

所以basicaly我給RotateAnimation一個隨機數,所以它停止旋轉的地方並不總是一樣。但是這不起作用,因爲像我說的那樣,它總是停在nr 1上。我想,如果我改變動畫的持續時間,輸出是不一樣的!因此,我嘗試在持續時間內放置一個隨機數字,但那不工作aswell.btw我已檢查其他職位,說它的隨機但它不是。

在理想情況下,動畫開始快速並減速並停止。

Thanx分配在先進的!

回答

0

你可以嘗試以下方法:

private static final float BASE_ROTATION_DEGREES = 3600; 
private static final int DURATION = 1000; 

//... 

spin.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     float deg = alberto.getRotation() + BASE_ROTATION_DEGREES + ((float)Math.random() * 360F); 
     alberto.animate().rotation(deg).setDuration(DURATION) 
      .setInterpolator(new AccelerateDecelerateInterpolator()); 
    } 
}); 

你可以插值更改爲其他內容,以及獲得不同的效果。

編輯:編輯,以解決問題,只有第一次旋轉是一次以上的革命。請注意,這意味着旋轉值將變得非常快!不應該提出問題,但值得記住。

另外編輯:Sample app/source code here如果你想看看。這在我的模擬器上運行良好。

+0

你好PPartisan,thanx分配回答我的問題!你幫我解決了我的問題,現在紡紗是隨機的。我必須將持續時間更改爲4000以更好地注意內插器;)第二次按下旋鈕時,它不再旋轉,只是一點點。任何想法,爲什麼這將是???它應該做同樣的事情嗎? – user2455311

+0

@ user2455311嗨,你能否將你的實現這個方法的代碼粘貼到你的OP中,然後留下評論以便我可以看看?我已經測試了這個結果,它似乎按預期工作,謝謝。 – PPartisan

+0

嗨,即時通訊使用你的代碼,唯一改變的是BASE_ROTATION_DEGREES爲5000,持續時間爲5500.通常,當再次按下按鈕時,它應該再次執行相同的動畫。也許因爲我在一個片段內(在oncreateView中)做這個? – user2455311

相關問題