私は持っている
ArrayList<ColorDrawable> colors = new ArrayList<ColorDrawable>();
for(int i = 0; i = intList.size(); i++){ //some list of ints
colors.add(new ColorDrawable(intList.get(i)));
SurfaceView + Canvas メソッドを使用して、リスト内のある色から別の色にフェードしたいと考えています。これが私の試みです:
public void run() {
int maxIndex = colors.size() - 1;
while (isItOK) {
for (int i = 0; i <= maxIndex; i++) {
int color = colors.get(i).getColor();
int nextColor = (i == maxIndex) ? colors.get(0).getColor() : colors.get(i + 1).getColor();
if(color < nextColor) {
for(; color <= nextColor; color++) {
Canvas c = holder.lockCanvas();
c.drawColor(color);
holder.unlockCanvasAndPost(c);
}
}
if(color > nextColor) {
for(; color >= nextColor; color--) {
Canvas c = holder.lockCanvas();
c.drawColor(color);
holder.unlockCanvasAndPost(c);
}
}
}
}
}
これはそのまま機能し、最初の色から 2 番目の色、2 番目の色、3 番目の色へとフェードしていくはずだと思います。以上。(私は別のデータもテストしました)。SurfaceView を使用するのはこれが初めてなので、キャンバス メソッドの実行方法が正しいかどうかはわかりません。Log.d を使用して、内側の for ループ (前に「if」ステートメントがあるループ) の 1 つに入ると、その for ループを離れないことがわかりました....これは私には意味がありませんしかし、キャンバスとホルダーに関係があると思います。ヘルプ?