私は私のレイアウトのこの部分を持っています:
<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 と 2 つのカスタム ビューがあります。私のアクティビティには、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 を最初に配置しました。
imageA の無効化を引き起こす setProgress を避ける必要があります。どうすればこれを達成できるかについてのアイデアはありますか?
ありがとうございました!