我有
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);
}
}
}
}
}
我觉得这应该按原样工作,并从第一种颜色褪色到第二种颜色,依此类推......最终循环,但相反,它从第一种颜色开始,然后褪色到一些不相关的颜色,结束超过。(我也测试了不同的数据)。这是我第一次使用 SurfaceView,所以我不确定我的画布方法是否正确。使用 Log.d,我看到一旦它进入一个内部 for 循环(前面带有“if”语句的循环),它就不会离开那个 for 循环......这对我来说没有意义但我认为这与画布和支架有关。帮助?