我如何使两个imageview同时改变几个图像



我目前正在尝试在Android上建立一个骰子滚动应用程序。

我设法建立我的基本布局和方法很容易,但我目前被困在以下问题:
我的屏幕上有两个ImageView,我需要让它们同时改变3次,这是一个骰子滚动的基本模拟,在最终的骰子面呈现给用户之前。

到目前为止,我是这样尝试的:

    public void rollDiceAnim() {
        ////// diceone anim
        final android.os.Handler handler = new android.os.Handler();
        Runnable runnable = new Runnable() {
            int counter = 0;
            @Override
            public void run() {
                if (counter<4) {
                    counter++;
                    Log.e("Counter value",counter+"!");
                    int diceOneAnim = (int) ((Math.random() * 6) + 1);
                    ImageView dice1_img = (ImageView) findViewById(R.id.dice1_img);
                    switch (diceOneAnim) {
                        case 1:
                            dice1_img.setImageResource(R.drawable.d1);
                            break;
                        case 2:
                            dice1_img.setImageResource(R.drawable.d2);
                            break;
                        case 3:
                            dice1_img.setImageResource(R.drawable.d3);
                            break;
                        case 4:
                            dice1_img.setImageResource(R.drawable.d4);
                            break;
                        case 5:
                            dice1_img.setImageResource(R.drawable.d5);
                            break;
                        case 6:
                            dice1_img.setImageResource(R.drawable.d6);
                            break;
                    }
                    handler.postDelayed(this, 150);
                } else {
                    rollDice();
                }

            }
        };
    /////////
    ///// dice two anim
    final android.os.Handler handler2 = new android.os.Handler();
    Runnable runnable2 = new Runnable() {
        int counter2 = 0;
        @Override
        public void run() {
            if (counter2<4) {
                counter2++;
                Log.e("Counter value",counter2+"!");
                int diceTwoAnim = (int) ((Math.random() * 6) + 1);
                ImageView dice2_img = (ImageView) findViewById(R.id.dice2_img);
                switch (diceTwoAnim) {
                    case 1:
                        dice2_img.setImageResource(R.drawable.d1);
                        break;
                    case 2:
                        dice2_img.setImageResource(R.drawable.d2);
                        break;
                    case 3:
                        dice2_img.setImageResource(R.drawable.d3);
                        break;
                    case 4:
                        dice2_img.setImageResource(R.drawable.d4);
                        break;
                    case 5:
                        dice2_img.setImageResource(R.drawable.d5);
                        break;
                    case 6:
                        dice2_img.setImageResource(R.drawable.d6);
                        break;
                }
                handler2.postDelayed(this, 500);
            } else {
                rollDice();
            }

        }
    };
    ////////////////////////
    handler.postDelayed(runnable, 100);
    handler2.postDelayed(runnable2, 100);
}

我制作了两个可运行的对象,每个对象随机迭代,在呈现最后一个之前改变一组骰子的面。

问题是当运行两个:

    handler.postDelayed(runnable, 100);
    handler2.postDelayed(runnable2, 100);

它们不能同时运行。第一个处理程序完成后,第二个处理程序仍有一些工作要做。

我已经尝试使用线程而不是处理程序,但我的应用程序只是崩溃。

我认为你可以尝试将这两个工作合并到同一个Runnable中。

我强烈建议查看有关AsyncTask的Android API。这是处理异步请求的更好方法,特别是当你有多个请求时。

最新更新