gpt4 book ai didi

android - SurfaceView + Canvas,从一种颜色淡入另一种颜色

转载 作者:行者123 更新时间:2023-11-29 21:59:56 25 4
gpt4 key购买 nike

我有

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,所以我不确定我的 Canvas 方法是否正确。 使用 Log.d,我看到一旦它进入一个内部 for 循环(前面带有“if”语句的循环),它就不会离开那个 for 循环....哪个对我来说没有意义,但我认为它与 Canvas 和支架有关。帮忙?

最佳答案

我不确定,如果我理解正确,如果不正确,请告诉我。

据我了解,您希望:遍历颜色并每次将背景颜色设置为颜色列表的第 i 个元素

更新:请注意,我还没有测试过它!

int currentIndex = 0;
int nextIndex = 0;

while (isItOK)
{
nextIndex = (currentIndex + 1) % colors.size();

int currentColor = colors.get(currentIndex).getColor();
int nextColor = colors.get(nextIndex).getColor();
while(currentColor != nextColor)
{
//extract red, green, blue, alpha from the current color

int r = Color.red(currentColor); //android.graphics.Color
int g = Color.green(currentColor);
int b = Color.blue(currentColor);
int a = Color.alpha(currentColor);

//extract the same from nextColor
int nr = Color.red(nextColor);
int ng = Color.green(nextColor);
int nb = Color.blue(nextColor);
int na = Color.alpha(nextColor);

//get currentColors values closer to nextColor
r = (r<nr) ? r+1 : ((r>nr) ? r-1 : r);
g = (g<ng) ? g+1 : ((g>ng) ? g-1 : g);
b = (b<nb) ? b+1 : ((b>nb) ? b-1 : b);
a = (a<na) ? a+1 : ((a>ar) ? a-1 : a);

// generate currentColor back to a single int
currentColor = Color.argb(a,r,g,b);

// paint it
Canvas canvas = holder.lockCanvas();
canvas.drawColor(currentColor );
holder.unlockCanvasAndPost(canvas);
}
currentIndex = (currentIndex + 1) % colors.size();
}

关于android - SurfaceView + Canvas,从一种颜色淡入另一种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12223127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com