Android:为什么ProgressBar的更新会使其他视图无效

时间:2013-09-28 21:54:33

标签: android android-layout android-progressbar

我有这部分布局:

<RelativeLayout
        android:id="@+id/gameportView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:layout_margin="3dp"
        android:background="@drawable/bg_container_rounded" >

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="16dp"
            android:layout_centerInParent="true"
            android:progress="0" />

        <com.pepotegames.spotthedifferences.DifferenceView
                android:id="@+id/imageA"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/progressBar"
                android:layout_centerHorizontal="true" />

        <com.pepotegames.spotthedifferences.DifferenceView
                android:id="@+id/imageB"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/progressBar"
                android:layout_centerHorizontal="true" />

    </RelativeLayout>

我有一个ProgressBar和两个自定义视图。在我的活动中,我有一个倒数计时器,用于更新我的ProgressBar和TextView:

timer = new CountDownTimer(level.getTimeC(),1000){
        public void onTick(long millisUntilFinished){
            level.setTimeC(millisUntilFinished);
            labelClock.setText(formatTime(millisUntilFinished));
            //bar.setProgress((int) (1000 - ((level.getTimeC() * 1000)/level.getTimeT())));
            bar.setProgress((int) (level.getTimeT() - level.getTimeC()));

            if(!hurryFlag){
                if(level.getTimeC() <= level.getTimeH()){
                    hurryFlag = true;
                    labelClock.setTextColor(getResources().getColor(R.color.hurry));

                    ImageView sprite = (ImageView) findViewById(R.id.level_sprite_clock);
                    sprite.setImageResource(R.drawable.sprite_clock_hurry);
                    //tic-tac sound
                }
            }
        }

        public void onFinish(){
            labelClock.setText("00:00");
            bar.setProgress((int) level.getTimeT());
            gameOver(false);
        }
    };

问题在于,当我调用bar.setProgress()时,它会导致重绘imageA(但不是imageB)。我已经阅读了布局绘制周期,它表示父项首先被绘制,然后是自上而下的子项。这就是为什么我首先放置我的ProgresBar。

我真的需要避免使用setProgress导致imageA失效。有关如何实现这一目标的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的imageA位于进度条上方。 删除android:layout_above="@+id/progressBar并尝试。