2017-09-18 4 views
0

これは私のMainActivityです。私は "ロール"ボタンを押して "ロール"ボタンを押すと、私のサイクルが終了するまで変化し、その変化を見たいと思っています。しかし、コードを実行してボタンを押すと、最終結果だけが表示されます。 "TimeUnit"の遅延を増やそうと試みましたが、アプリの速度が遅くなるだけで、 "ローリング"することはありません。どこが間違っていて、ライト方向のコードなのですか、または何か重要なものがありませんか?私はまだAndroidのコーディングを学んでいます:)Android Javaダイスロールアプリはdinamycalyを変更していません

package com.example.rado.diceroller; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.util.Random; 
import java.util.concurrent.TimeUnit; 

public class MainActivity extends AppCompatActivity { 

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

    public void myButtonListenerMethod() { 
     Button button = (Button) findViewById(R.id.rollButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       for (int i = 0; i < 3; i++) { 
        try { 

         Random rand = new Random(); 
         int rollResult = rand.nextInt(6) + 1; 
         TextView diceResult = (TextView) findViewById(R.id.rollResult); 
         diceResult.setText(Integer.toString(rollResult)); 
         ImageView img = (ImageView) findViewById(R.id.diceImage); 
         TimeUnit.MILLISECONDS.sleep(10); 

         switch (rollResult) { 
          case 1: 
           img.setImageResource(R.drawable.dice1); 
           break; 
          case 2: 
           img.setImageResource(R.drawable.dice2); 
           break; 
          case 3: 
           img.setImageResource(R.drawable.dice3); 
           break; 
          case 4: 
           img.setImageResource(R.drawable.dice4); 
           break; 
          case 5: 
           img.setImageResource(R.drawable.dice5); 
           break; 
          case 6: 
           img.setImageResource(R.drawable.dice6); 
           break; 
         } 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 
    } 


} 
+0

ローリングアニメーションを見たいと思っていますか? –

+0

ちょうど "ロール"を打つ前に私が与えた遅れで正確に、あるいは少数の絵が変化しています。 – Rado

+0

あなたはスリープ時間を長くする必要があります。変化が見られないほど速い10ミリ秒です。約120ミリ秒で目立つ差が出るかもしれません。また、デバイスの能力によって決まります –

答えて

0

あなたの問題は、実行が終了した後に表示の変更をレンダリングすることです。だからTimeUnit.MILLISECONDS.sleepで望みどおりに多くの時間待つことができます。唯一の結果は、Androidがちょっとフリーズしてから、forループを再起動することだけです。しかし、彼は実行が終了したときにのみレンダリングを開始し、ユーザーは決して見ることのないものをレンダリングするために時間とCPUを浪費しているとは言えません。

このように目標を達成することはできません。

package com.firegloves.test; 

import android.content.Intent; 
import android.graphics.Color; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 

import java.util.Random; 
import java.util.concurrent.TimeUnit; 

public class MainActivity extends AppCompatActivity { 

    private int rolledTimes = 0; 

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


    } 

    public void myButtonListenerMethod() { 
     Button button = (Button) findViewById(R.id.rollButton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setTimeout(); 
      } 
     }); 
    } 

    private void setTimeout() { 
     final Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       if (rolledTimes < 6) { 
        // roll your dice 
        rollDice(); 
        // set timeout again 
        setTimeout(); 
       } else { 
        rolledTimes = 0; 
       } 
      } 
     }, 100); 
    } 


    private void rollDice() { 

     rolledTimes++; 

     Random rand = new Random(); 
     int rollResult = rand.nextInt(6) + 1; 
     TextView diceResult = (TextView) findViewById(R.id.rollResult); 
     diceResult.setText(Integer.toString(rollResult)); 
     ImageView img = (ImageView) findViewById(R.id.diceImage); 

     switch (rollResult) { 
      case 1: 
       img.setImageResource(R.drawable.dice1); 
       break; 
      case 2: 
       img.setImageResource(R.drawable.dice2); 
       break; 
      case 3: 
       img.setImageResource(R.drawable.dice3); 
       break; 
      case 4: 
       img.setImageResource(R.drawable.dice4); 
       break; 
      case 5: 
       img.setImageResource(R.drawable.dice5); 
       break; 
      case 6: 
       img.setImageResource(R.drawable.dice6); 
       break; 
     } 

    } 

} 
+0

ありがとうございます、これは私が欲しかったものです:)今は私の問題がどこにあるかを見ています。 – Rado

+0

@Radoあなたが歓迎です、それが動作する場合は、私の答えを受け入れてください:) – firegloves

+0

それを完了してください。私はこれを "受け入れる"ことができるか分からなかった:) – Rado

関連する問題